我有一个名为List的类,它实现了一个链表。
我正在尝试重载链表类的'+'运算符,所以我可以做这样的事情:
List l1;
/* add a and b to l1 */
List l2;
/* add c and d to l2 */
List l3 = l1 + l2;
/* l3 contains a, b, c, d and l1 and l2 are unchanged */
我已经实现了operator + = like,它似乎工作正常。
List& List::operator+=(List& otherList) {
Node* currNode = otherList.getHead();
while (currNode) {
this->add(currNode->getData());
currNode = currNode->getNext();
}
return *this;
}
这是我尝试实现operator +但它似乎不起作用。
List List::operator+(List& otherList) {
List* l = new List();
l += *this;
l += otherList;
return *l;
}
当我这样尝试时:
List l1;
List l2;
List l3;
l3 = l1 + l2;
我收到此错误:
Main.cc:25:13: error: no match for ‘operator=’ in ‘l3 = List::operator+(List&)((* & l2))’
任何想法我做错了什么?
更新:我还有一个看起来像这样的运算符=似乎工作正常
List& List::operator=(List& otherList);
答案 0 :(得分:4)
你的operator+
没有错;你显然错过了一个复制赋值操作符。
另外,停止动态分配所有内容;你像个小偷一样漏水。
答案 1 :(得分:1)
如果operator+=
是正确的,那么只需执行此操作(在您的类定义之外):
List operator+(List x, List const &y) { return x += y; }
正如其他人所说,由于您正在复制对象,因此必须具有复制赋值运算符,以及复制构造函数和析构函数。 (除非默认值有效,否则我们无法确定List
的定义)。
答案 2 :(得分:0)
看起来我找到了一个足够的解决方案......这对我有用:
List& List::operator+(List& otherList) {
List* l = new List();
*l += *this;
*l += otherList;
return *l;
}
感谢大家的帮助。