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