我试图使用模板为我的链表类编写一个重载的赋值运算符,但我不断收到错误。
对我做错的任何帮助都会很棒。
我得到的错误是"行外定义与LL"中的任何声明都不匹配。
我的声明是:
const LL<T>& operator=(const LL<T> &rhsObj);
,实施是:
template<typename T>
LL<T>& LL<T>::operator=(const LL<T>& rhsObj) const
{
if (this!= &rhsObj)
{
//no self assignment so OK to continue
//deallocate left hand side memory
this->clear();
count = 0;
head = NULL;
cout <<"calling function copyList()" << endl;
count = 0;
head = NULL;
string diCode = "";
int onNode = 0;
if(rhsObj.head == NULL)
{
cout <<"other list is empty, nothing to do" << endl;
}
else
{
onNode =0;
Node<T> *otherCurrent = rhsObj.head;
while( otherCurrent != NULL)
{
int duplicateInfo;
duplicateInfo = otherCurrent->info;
push_back(duplicateInfo);
otherCurrent = otherCurrent ->next;
onNode++;
} //END while(otherCurrent != NULL)
} // END else block of if (otherLL.head == NULL)
} // END if (this != &rhsObj)
return *this;
}
答案 0 :(得分:0)
在更新的代码中,错误是因为您的声明是:
const LL<T>& operator=(const LL<T> &rhsObj);
但尝试的实施是:
LL<T>& LL<T>::operator=(const LL<T>& rhsObj) const
const
的位置实际上很重要。第一个意味着函数返回一个const的引用;第二个意味着你不能在函数中修改*this
。
尾随const
是函数签名的一部分,因此编译器不会将您的实现视为与最初声明的函数相对应。因此,您似乎正在尝试添加一个在类定义中未声明的新函数,这是不允许的。
要解决此问题,请使实现与声明匹配(将const
从结尾移至开头)。