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;}代码>,编译得很好。这并不完全正确。你所引用的那一行是有效的。错误在别处。错误的一行应该按照你的建议修改,但不是这一行。我打字是出于习惯,我总是“说我的意思”,但我实际上是想提醒大家注意去掉常量。我将更新并解释为什么删除常量。请添加实际完整的错误消息和引用的行。请添加实际完整的错误消息和引用的行。