2016-05-14 89 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 ++编译器,并且出现了'预期的主表达式'>'令牌'之前的错误。 这是关于模板的问题吗?我怎么修复它? 问题现在发生在将顶点(vt)插入我写的向量(我自己的向量)中。模板错误期望主表达式在'>'标记之前

+3

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

+0

第二个错误来自**级联**。第一个是关于在顶点 p中使用顶点;一旦失败,“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); 
} 

...然后编译器(gcc,-fsyntax-only -std=c++98 -Wall -Wextra),没有错误或警告。

因此,您的问题与您的vector类。这就是为什么我们要求最小的完整的可验证的例子 - 如果编译器的错误信息没有意义,那么问题可能不是你想象的那样。

(yes,编译应该做说明问题的一个更好的工作,但原来是真的很辛苦,尤其是对于C++,它的语法是个老大难问题只是摆在首位解析。)

+0

谢谢@zwol!但是我的代码仍然有问题,并且我已经发布了所有关于我的问题的部分(作为编辑后的版本)。你能帮我解决这个问题吗? – jombo

+0

@jombo如果我尝试编译你提供的代码,我会得到大量的错误消息,其中没有一个是你要求帮助的。除非您确实按照https://stackoverflow.com/help/mcve上的说明操作,否则我无法再帮助您。 – zwol

+0

@jombo嗯,实际上,MCVE指令缺少一个关键部分。为了帮助,我需要看到一个忠实地再现你所遇到的问题的程序,*并且没有其他问题*。你只能删除*不相关的代码。例如,可以移除所有在你要求帮助的代码中没有使用的'vector'方法,但是它不能很好地移除'vector'实例变量, vector *方法,*用于您要求帮助的代码。看到? – zwol

相关问题