使用类模板需要参数列表

时间:2013-11-07 16:37:44

标签: c++ class templates

首先,这是我正在创建的矢量类,其基本功能类似于标准库矢量。我们现在正试图使它成为一个类模板。

我已经看过几个人在努力解决这个错误的例子,但我觉得我宣布我的功能的方式很好,所以我看不出问题。这是我的声明,

template <typename T>
class MyVector
{
public:
const MyVector& operator=(const MyVector&);
...
}

实施代码。

template <typename T>
MyVector<T>::MyVector(const MyVector& b)
{
//set the vcapacity/vsize equal to the object passed to setup for a new deep copy
vcapacity = b.vcapacity;
vsize = b.vsize;

//allocate space for a new varray that is the copy
varray = new T[vcapacity];

//copy the data into the new array
for (int i = 0; i < vsize; i++)
{
    this->varray[i] = b.varray[i];
}
}

所以我基本上得到了2个错误,我认为这些错误指的是同一个东西。第一个指向我的第一行实现之后,模板行说“使用类模板需要参数列表”,第二行指向实现代码的结尾,指出“无法将函数定义与现有声明匹配”。 / p>

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您的构造函数参数缺少实现中的模板参数:

template <typename T>
MyVector<T>::MyVector(const MyVector<T>& b)
//                                  ^^^

答案 1 :(得分:1)

const MyVector& operator=(const MyVector&);

应该是

MyVector& operator=(const MyVector&);

See Here for why

对于错误,在实现中使用模板参数:

const MyVector<T>&

(顺便提一下,您是否知道您向我们提供了operator=的声明以及复制构造函数的实现?:-))

无论如何,想到这样 - 在实现中实际上没有这样的类MyVector一样,只有 一个类一旦成为模板参数已添加。

答案 2 :(得分:0)

实现的第一行是在模板类定义的最后一行之后,在您定义的代码中,在该定义的结束;之后是否省略了}?当标题文件以类定义结束而不结束;时,通常由(由我)导致的错误可能导致下一个包含文件中的错误消息。