2016-05-14 3 views
-4
template <class T>class vector{  //this is the part for my vector, which may lead to the error shown below. 
protected: 
    T* arr; 
    void expand(){ 
     if(size<capacity)return; 
     if(capacity<con)capacity=con; 
     T* temp=new T[capacity=2*capacity]; 
     for(int i=0;i<size;i++)temp[i]=arr[i]; 
     delete[] arr; 
     arr=temp; 
     temp=NULL; 
    }; 
public: 
    vector(int c=con,int s=0,T v=0){arr=new T[capacity=c];for(size=0;size<s;arr[size++]=v);} 
    T& operator[](int r)const{return arr[r];} 
    int insert(int r,const T& e){   //inserting at designated place. 
     expand(); 
     for(int i=size;i>r;i--)arr[i]=arr[i-1]; 
     arr[r]=e; 
     size++; 
     return r; 
    } 
    int insert(const T& e){     //inserting at the end 
     return insert(size,e); 
    } 
}; 
template<class Tv>class vertex{ 
public: 
    Tv data; 
    vertex(Tv const& e):data(e){} 
}; 
template<class Tv,class Te>class GraphMatrix{ 
private: 
    vector<vertex<Tv> > v; 
public: 
    int insert(Tv const& vt){ 
    return v.insert(vertex<Tv>(vt)); //error happens here "expected primary-expression before '>' token." 
    } 
} 
int main(){ 
    GraphMatrix<int,int> mail; 
    int i=1; 
    mail.insert(i); 
} 

私はg ++コンパイラを使用していますが、 "> 'token'の前に予期したprimary-expressionがあります。 テンプレートに関して問題がありますか?どうすれば修正できますか? 問題は、私が書き込んだベクトル(自分自身のベクトル)に頂点(vt)を挿入するときに発生します。それはエラーなしで(GCC、-fsyntax-only -std=c++98 -Wall -Wextra)をコンパイル'>'トークンの前にテンプレートエラーが予期される

+3

https://stackoverflow.com/help/mcve – zwol

+0

2番目のエラーは**カスケード**から発生します。最初のものは 'vertex p'の' vertex 'の使用に関するものです。それが失敗すると 'p'は意味をなさない。だから無視してください。あなたが最初のものを修正したら、それはほとんどなくなります。 –

+0

申し訳ありません私はそれを明確にするためにいくつかの変更を行いました。 – jombo

答えて

1

私はあなたのコードに、あなたがそれを呼んでいる方法と一致vectorのスタブの定義を、追加した場合...

template <class Tv> class vector 
{ 
public: 
    int insert(Tv const &); 
}; 

template <class Tv> class vertex 
{ 
public: 
    Tv data; 
    vertex(Tv const &e) : data(e) {} 
}; 

template <class Tv, class Te> class GraphMatrix 
{ 
private: 
    vector<vertex<Tv> > v; 

public: 
    int insert (Tv const &vt) 
    { 
     return v.insert(vertex<Tv>(vt)); 
    } 
}; 

int main() 
{ 
    GraphMatrix<int, int> mail; 
    int i = 1; 
    mail.insert(i); 
} 

...または警告。

あなたの問題は、vectorクラスのです。これは最小限のの検証可能な例を求めている理由です。コンパイラのエラーメッセージが意味をなさない場合、問題はあなたの考えではない可能性があります。

(はい、コンパイラ問題を説明するのより良い仕事をする必要がありますが、それは特にその文法だけで最初の場所で解析する悪名高い困難であるC++のために、本当に難しいことが判明。)

+0

ありがとう@zwol!しかし、私はまだ自分のコードに問題があります。私はここで私の問題に関するすべての部分を(編集後のバージョンとして)投稿しました。あなたはこの問題で私を助けてくれますか? – jombo

+0

@jomboあなたが提供したコードをコンパイルしようとすると、私はエラーメッセージの洪水を受け取りますが、あなたに助けを求めているものはありません。 https://stackoverflow.com/help/mcveの指示に実際に従うまで、私はもうあなたを手伝っていません。 – zwol

+0

@jombo実際、MCVE命令には重要な要素がありません。お手伝いをするために、あなたは問題を忠実に再現するプログラムを見なければなりません。*その他の問題はありません。無関係な*コードを削除する必要があります。例えば、あなたが助けを求めているコードで使われていない 'vector'メソッドのすべてを削除しても問題ありませんが、' vector'インスタンス変数を削除することはできません。あなたが助けを求めているコードで*使用されている 'vector'メソッドです。見る? – zwol

関連する問題