C++ ';不匹配';重载多个运算符时出错

C++ ';不匹配';重载多个运算符时出错,c++,templates,linked-list,overloading,C++,Templates,Linked List,Overloading,我尝试重载“+”运算符和“=”运算符,如下所示: template<class T> class LinkedList { public: LinkedList(); LinkedList(const LinkedList<T> &list); //Copy Constructor! Allocating new memory! ~LinkedList(); void PushNode(T new_data); voi

我尝试重载“+”运算符和“=”运算符,如下所示:

template<class T>
class LinkedList {     
 public:
  LinkedList();
  LinkedList(const LinkedList<T> &list);        //Copy Constructor! Allocating new memory!
  ~LinkedList();
  void PushNode(T new_data);
  void Delete(LinkedNode<T> *pnode);
  bool CopyDelete(LinkedNode<T> *pnode);
  bool CopyDeleteMiddle(); 
  void Show();
  int get_length();
  void Clear();
  LinkedList<T> operator+(LinkedList<T> &list);  //Overloading '+' operator
  LinkedList<T> &operator=(LinkedList<T> &list); //Overloading '=' operator
  LinkedNode<T> *head;
  LinkedNode<T> *tail;

 private:
  int length;
};

template <class T>
LinkedList<T>& LinkedList<T>::operator=(LinkedList<T> &list)
{
  if (&list != this) {
    Clear();
    LinkedNode<T> *pnode = list.head;
    while(pnode)
    {
      PushNode(pnode->data);
      pnode = pnode->next;
    }
  }
  return *this;
}

template <class T>
LinkedList<T> LinkedList<T>::operator+(LinkedList<T> &list)
{
  int carry = 0;
  LinkedList<T> sum_list;
  LinkedNode<T> *pnode = list.head;
  LinkedNode<T> *pnode_this = head;
  if (!pnode || !pnode_this)
    throw("Invalid list!");

  T digit, digit_this, digit_sum;
  while(pnode || pnode_this)
  {
    if (!pnode) {
      digit = 0;
      digit_this = pnode_this->data;
      pnode_this = pnode_this->next;
    } else if (!pnode_this) {
      digit = pnode->data;
      digit_this = 0;
      pnode = pnode->next;
    } else {
      digit = pnode->data;
      digit_this = pnode_this->data;
      pnode = pnode->next;
      pnode_this = pnode_this->next;
    }
    digit_sum = digit + digit_this + carry;
    if (digit_sum >=10) {
      digit_sum-=10;
      carry = 1;
    } else {
      carry = 0;
    }
    sum_list.PushNode(digit_sum);

  }
  return sum_list;
}
我所有关于LinkedList类的声明和定义都在MySinglyLinkedList.h中,我的主要函数在2_4.cc中

我在Linux(Ubuntu)中使用GCC4.5.2编译了2_4.cc,遇到以下错误:

2_4 .cc:在函数“
intmain(int,char**)
”中:

2_4 .cc:39:15:错误:在“
sum=LinkedList::operator+(LinkedList&)[带T=int]((LinkedList&)(&list2))中,“
运算符=
”不匹配

MySinglyLinkedList.h:171:16:注意:候选项是:
LinkedList&LinkedList::operator=(LinkedList&)[带T=int]


重载函数有什么问题吗?

参数tot operator=应该是常量引用。临时(运算符+的结果)不能绑定到非常量引用。

引用参数:

LinkedList<T>& LinkedList<T>::operator=(LinkedList<T> &list)
LinkedList<T> LinkedList<T>::operator+(LinkedList<T> &list)

注意:这需要正确实现复制构造函数。

当然,绝大多数“测试用例”都不需要显示问题?非常感谢!这真是个聪明的主意!
sum = list1+list2; //error occurred here!
LinkedList<T>& LinkedList<T>::operator=(LinkedList<T> &list)
LinkedList<T> LinkedList<T>::operator+(LinkedList<T> &list)
LinkedList<T>::operator=(const LinkedList<T> &list)
LinkedList<T> LinkedList<T>::operator+(const LinkedList<T> &list)
LinkedList<T>::swap(LinkedList<T> & rhs) {
    using std::swap;
    swap(head, rhs.head);
    swap(tail, rhs.tail;
}

LinkedList<T>& LinkedList<T>::operator=(LinkedList<T> list) {
    this->swap(list);
    return *this;
}