模板错误预期在'>'之前的主要表达令牌

时间:2016-05-14 14:11:13

标签: c++ templates initialization

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)插入由我(我自己的向量)写入的向量中。

1 个答案:

答案 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 ++而言,其语法非常难以解析而不是首先解析。)