重载模板中的运算符"="时出现问题

Problems overloading operator "=" in template

本文关键字:问题 运算符 重载      更新时间:2023-10-16

我从早期赋值的序列类中获得此代码,并且我应该将其转换为具有节点类的模板。我所有的其他函数似乎都工作得很好,但是这个重载操作符的措辞或语义似乎有问题。下面是我的代码:

template <class sequence, class Item>
void operator =(const sequence source)
{
if (this == &source)
{
    return;
}
list_clear(head_ptr);
many_nodes = 0;
list_copy(source.head_ptr, head_ptr, tail_ptr);
start();
for (node *ptr=source.head_ptr; ptr != source.cursor; ptr = ptr->link())
{
    advance();
}
many_nodes = source.many_nodes;
}

这是我得到的错误:6sequence4.template(152):错误C2801: 'main_savitch_6B::operator ='必须是一个非静态成员

第152行是函数的右括号。

我确实在网站上搜索了答案,并尝试了一些修复,但似乎都不起作用。

谢谢大家,我感谢所有的帮助!

我认为你的operator=的签名不正确。我想通常你应该是这样的:

Sequence & operator=(const Sequence & rhs){
if (&rhs != this){
// Your stuff ...
}
return *this;
}

看起来您已经被要求创建一个类Sequence,模板化在Item上,类Sequence有一个赋值操作符。在这种情况下,语法应该是。

template< class Item >
class Sequence
{
    Sequence& operator=( Sequence const& rhs )
    {
        ...
    }
...
};

或者我可能误解了你的问题