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 ++编译器,我得到了一个错误&#34;期望在&#39;&gt;&#39;之前的主要表达式令牌&#34 ;. 这是关于模板的问题吗?我该怎么办呢? 现在问题在于将顶点(vt)插入由我(我自己的向量)写入的向量中。
答案 0 :(得分: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);
}
...然后编译(gcc,-fsyntax-only -std=c++98 -Wall -Wextra
),没有任何错误或警告。
因此,您的vector
课程的问题 。这就是为什么我们要求最小的完整的可验证的示例 - 如果编译器的错误消息没有意义,那么问题很可能不是您认为的那样。
(是的,编译器应该更好地解释问题,但事实证明这非常困难,特别是对于C ++而言,其语法非常难以解析而不是首先解析。)