C ++ operator + overload单链表

时间:2013-10-01 05:30:20

标签: c++ overloading operator-keyword singly-linked-list

我正在尝试为链表创建一个运算符重载,该链表将在+的右侧并将该链表连接到左侧的列表中。

班级声明:

 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.

我不确定为什么会出现编译时错误。我的逻辑是将列表中的每个元素放在右侧,然后将其推到左侧列表的后面。想法?

1 个答案:

答案 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;
}