0

我正在尝试为链表编写一个运算符重载,它将采用 + 的右侧并将该链表连接到左侧的列表。

类声明:

 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.

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

4

1 回答 1

1

您报告的确切错误可能在您未显示的代码中,但重要的是要指出operator+不应返回引用。您需要会员运营商

List<T> operator+(const List<T>& right);

或非会员版本,

template <typename T>
List<T> operator+(const List<T>& lhs, const List<T>& rhs);

您可以根据成员运算符来实现,您可以在其中附加to+=的元素并通过引用返回。你的例子中的逻辑有缺陷,我让你来解决这个问题,但这是一般形式: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;
}
于 2013-10-01T05:46:33.620 回答