首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

多个运算符重载产生no match

2013-01-28 
多个运算符重载发生no match代码基本与我上一个问题贴中相同:http://bbs.csdn.net/topics/390344120不过我

多个运算符重载发生no match
代码基本与我上一个问题贴中相同:http://bbs.csdn.net/topics/390344120

不过我想多实现链表相加和赋值的功能,顺便把拷贝构造函数也自定义了一个:

template<class T>
class LinkedList {
 public:
  LinkedList();
  LinkedList(const LinkedList<T> &list);        //自定义的拷贝构造函数
  ~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);  //重载加
  LinkedList<T> &operator=(LinkedList<T> &list); //重载赋值
  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;
}



main函数中,先实例化三个对象:
LinkedList<int> list1, list2, sum;
然后初始化前两个对象,执行:sum = list1+list2;

但编译时出现错误信息:
2_4.cc: In function ‘int main(int, char**)’:
2_4.cc:39:15: error: no match for ‘operator=’ in ‘sum = LinkedList<T>::operator+(LinkedList<T>&) [with T = int](((LinkedList<int>&)(& list2)))’
MySinglyLinkedList.h:171:16: note: candidate is: LinkedList<T>& LinkedList<T>::operator=(LinkedList<T>&) [with T = int]

不知我重载函数哪里写得有问题?
谢谢! list 运算符重载
[解决办法]
改成这样试试

LinkedList<T> operator+(LinkedList<T> const&list);  //重载加
LinkedList<T> &operator=(LinkedList<T> const&list); //重载赋值

operator+ 以后生成的匿名对象是右值,不能绑定到 non-const lvalue referenc.

热点排行