0

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

我查看了一些为这个错误而苦苦挣扎的人的例子,但我觉得我声明我的函数的方式很好,所以我看不到问题所在。这是我的声明,

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个错误。第一个指向我在模板行之后的第一行实现,说“使用类模板需要参数列表”,第二个指向实现代码的结尾,说明“无法将函数定义与现有声明匹配”。

有任何想法吗?

4

3 回答 3

3

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

template <typename T>
MyVector<T>::MyVector(const MyVector<T>& b)
//                                  ^^^
于 2013-11-07T16:46:46.757 回答
1
const MyVector& operator=(const MyVector&);

应该

MyVector& operator=(const MyVector&);

请参阅此处了解原因

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

const MyVector<T>&

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

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

于 2013-11-07T16:39:34.713 回答
0

实现的第一行是否就在模板类定义的最后一行之后,并且您是否;在关闭}该定义后省略了 a 在您发布的代码中?当头文件以类定义结尾而没有结尾时,可能会在下一个包含文件中导致错误消息(由我犯);

于 2016-06-28T16:43:40.317 回答