【问题标题】:template error expected primary-expression before '>' token [closed]'>'标记之前的模板错误预期主表达式[关闭]
【发布时间】:2016-05-14 14:11:13
【问题描述】:
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++ 编译器,但出现错误“预期在 '>' 标记之前的主表达式”。 是模板的问题吗?我该如何解决? 现在问题发生在将 vertex(vt) 插入我编写的向量(我自己的向量)中。

【问题讨论】:

  • 第二个错误来自级联。第一个是关于vertex&lt;Tv&gt;vertex&lt;Tv&gt; p中的使用;一旦失败,p 就没有意义了。所以忽略那个;一旦你修复了第一个,它几乎肯定会消失。
  • 对不起,我做了一些修改以使其更清晰。
  • vector::insert 没有一个参数。它也不返回int。如您所知,这是否是您的真实代码:ideone.com/RU1TFW
  • 是的,我写了自己的向量,这里没有介绍。但似乎问题与插入函数中的 vertex 更相关。

标签: c++ templates initialization


【解决方案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++,其语法一开始就很难解析.)

【讨论】:

  • 谢谢@zwol!但是我的代码仍然有问题,并且我已经在此处发布了有关我的问题的所有部分(作为编辑后的版本)。你能帮我解决这个问题吗?
  • @jombo 如果我尝试编译您提供的代码,我会收到大量错误消息,其中没有一个是您寻求帮助的错误消息。在您真正按照stackoverflow.com/help/mcve 的说明进行操作之前,我不会再为您提供帮助。
  • @jombo 嗯,实际上,MCVE 指令缺少关键部分。为了提供帮助,我需要查看一个程序,它可以忠实地重现您遇到的问题,并且没有其他问题。您只能删除无关代码。例如,可以删除所有在您寻求帮助的代码中未使用的 vector 方法,但删除 可以删除 vector 实例变量>由vector 方法使用,而您正在寻求帮助的代码正在使用这些方法。看到了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2013-01-13
  • 2017-09-24
  • 2012-03-09
  • 1970-01-01
相关资源
最近更新 更多