首先,这是我正在创建的矢量类,其基本功能类似于标准库矢量。我们现在正试图使它成为一个类模板。
我已经看过几个人在努力解决这个错误的例子,但我觉得我宣布我的功能的方式很好,所以我看不出问题。这是我的声明,
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>
有什么想法吗?
答案 0 :(得分:3)
您的构造函数参数缺少实现中的模板参数:
template <typename T>
MyVector<T>::MyVector(const MyVector<T>& b)
// ^^^
答案 1 :(得分:1)
const MyVector& operator=(const MyVector&);
应该是
MyVector& operator=(const MyVector&);
对于错误,在实现中使用模板参数:
const MyVector<T>&
(顺便提一下,您是否知道您向我们提供了operator=
的声明以及复制构造函数的实现?:-))
无论如何,想到这样 - 在实现中实际上没有这样的类和MyVector
一样,只有 一个类一旦成为模板参数已添加。
答案 2 :(得分:0)
实现的第一行是在模板类定义的最后一行之后,在您定义的代码中,在该定义的结束;
之后是否省略了}
?当标题文件以类定义结束而不结束;
时,通常由(由我)导致的错误可能导致下一个包含文件中的错误消息。