C++ 使用类模板需要参数列表

C++ 使用类模板需要参数列表,c++,class,templates,C++,Class,Templates,首先,这是我正在创建的向量类,它的基本功能类似于标准库向量。我们现在正试图使它成为一个类模板 我已经看了一些与这个错误作斗争的人的例子,但是我觉得我声明函数的方式很好,所以我看不出问题所在。这是我的声明 template <typename T> class MyVector { public: const MyVector& operator=(const MyVector&); ... } 模板 类MyVector { 公众: 常量MyVector&运算符=(常

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

我已经看了一些与这个错误作斗争的人的例子,但是我觉得我声明函数的方式很好,所以我看不出问题所在。这是我的声明

template <typename T>
class MyVector
{
public:
const MyVector& operator=(const MyVector&);
...
}
模板
类MyVector
{
公众:
常量MyVector&运算符=(常量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];
}
}
模板
MyVector::MyVector(常量MyVector&b)
{
//将vcapacity/vsize设置为传递给安装程序的新深度副本的对象
vcapacity=b.vcapacity;
vsize=b.vsize;
//为作为副本的新varray分配空间
varray=新的T[容量];
//将数据复制到新数组中
对于(int i=0;ivarray[i]=b.varray[i];
}
}
所以我基本上得到了两个错误,我假设它们是指同一件事。第一个指向模板行后面的第一行实现,表示“使用类模板需要参数列表”,第二个指向实现代码末尾,表示“无法将函数定义与现有声明匹配”

有什么想法吗

const MyVector& operator=(const MyVector&);
应该是

MyVector& operator=(const MyVector&);

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

const MyVector<T>&
const MyVector&
(顺便问一下,您是否知道您向我们提供了
operator=
的声明和复制构造函数的实现?:-)

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

应该是

MyVector& operator=(const MyVector&);

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

const MyVector<T>&
const MyVector&
(顺便问一下,您是否知道您向我们提供了
operator=
的声明和复制构造函数的实现?:-)


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

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

template <typename T>
MyVector<T>::MyVector(const MyVector<T>& b)
//                                  ^^^
模板
MyVector::MyVector(常量MyVector&b)
//                                  ^^^

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

template <typename T>
MyVector<T>::MyVector(const MyVector<T>& b)
//                                  ^^^
模板
MyVector::MyVector(常量MyVector&b)
//                                  ^^^

是实现的第一行,紧跟在模板类定义的最后一行之后,您是否省略了
在您发布的代码中该定义的结束
}
之后?(我)经常犯的一个错误,当头文件以类定义结尾而不以
结尾时,会在下一个包含的文件中产生错误消息

是实现的第一行,紧跟在模板类定义的最后一行之后,您是否省略了
在您发布的代码中该定义的结束
}
之后?(我)经常犯的一个错误,当头文件以类定义结尾而不以
结尾时,会在下一个包含的文件中产生错误消息

不正确<在此上下文中,code>MyVector
MyVector
相同。最小反例:
template struct-vec{const-vec&operator=(const-vec&){return*this;},编译得很好。这并不完全正确。你所引用的那一行是有效的。错误在别处。错误的一行应该按照你的建议修改,但不是这一行。我打字是出于习惯,我总是“说我的意思”,但我实际上是想提醒大家注意去掉常量。我将更新并解释为什么也要删除常量。不正确<在此上下文中,code>MyVector
MyVector
相同。最小反例:
template struct-vec{const-vec&operator=(const-vec&){return*this;},编译得很好。这并不完全正确。你所引用的那一行是有效的。错误在别处。错误的一行应该按照你的建议修改,但不是这一行。我打字是出于习惯,我总是“说我的意思”,但我实际上是想提醒大家注意去掉常量。我将更新并解释为什么删除常量。请添加实际完整的错误消息和引用的行。请添加实际完整的错误消息和引用的行。