我正在尝试为链表创建一个运算符重载,该链表将在+的右侧并将该链表连接到左侧的列表中。
班级声明:
List<T>& operator+(const List<T>& right);
方法:
template <typename T>
List<T>& List<T>::operator+(const List<T>& right){
List result(*this);
while(right->next != NULL){
result->push_back(right->data);
}
return list;
}
司机:
mylist + mylist2; //both list objects already created.
错误讯息:
Error: The operation "List<std::string>* + List<std::string>*" is illegal.
我不确定为什么会出现编译时错误。我的逻辑是将列表中的每个元素放在右侧,然后将其推到左侧列表的后面。想法?
答案 0 :(得分:1)
您报告的确切错误可能是您未显示的代码,但重要的是要指出operator+
不应返回引用。您需要成员运营商
List<T> operator+(const List<T>& right);
或非会员版
template <typename T>
List<T> operator+(const List<T>& lhs, const List<T>& rhs);
您可以使用成员+=
运算符实现,您可以将lhs
的元素追加到*this
并通过引用返回*this
。你的例子中的逻辑是有缺陷的,我把它留给你解决,但这是一般形式:
List<T>& operator+=(const List<T>& rhs)
{
// append elements from rhs into *this
....
return *this;
}
您的operator+
实施变得非常简单:
template <typename T>
List<T> operator+(const List<T>& lhs, const List<T>& rhs)
{
List<T> tmp = lhs;
tmp += rhs;
return tmp;
}