gpt4 book ai didi

c++ - 重载多个运算符时出现“不匹配”错误

转载 作者:行者123 更新时间:2023-11-28 03:25:12 25 4
gpt4 key购买 nike

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

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<int> list1;
LinkedList<int> list2;
LinkedList<int> sum;

然后我将两个列表相加并将结果存储在总和中:

sum = list1+list2; //error occurred here!

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

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

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]

我的重载函数有什么问题吗?

最佳答案

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

关于c++ - 重载多个运算符时出现“不匹配”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14289539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com