未检测到重载运算符

时间:2011-06-11 05:37:32

标签: c++ templates overloading operator-keyword

首先,我使用模板创建了一个双向链表。我有一个“帐户”类,我已经重载了“==”运算符来比较帐户ID。我创建了一个链接列表来保存帐户。

当我向列表添加新帐户时,它会调用“包含?”调用==运算符的方法。这是调用错误的地方,g ++告诉我

  

sll.h:在成员函数'bool list :: contains(T)[with T = account]':

     

customer.h:25:35:从这里实例化

     

sll.h:261:3:错误:'temp->节点中的'operator =='不匹配:: data == item'

     

account.h:36:6:注意:候选人是:bool account :: operator ==(account&)

我现在一直在调查几个小时,我无法深究它。我怀疑它可能与我使用模板这一事实有关。我创建了测试程序,看看我是否正确地重载了​​操作符并且它按预期工作。

另请注意:有一个客户类是包含在其中的帐户列表,这就是所谓的“添加”方法。不幸的是,我不能发布超过2个超链接,所以我只能说出这个课程是正确的。 = P

由于代码有点长,我使用了pastie:

Linked list class

Account class

1 个答案:

答案 0 :(得分:6)

当您尝试与const参数进行比较时,您的运算符==将其右参数作为非const引用。顺便说一句,您的运营商==也是非常规成员。

  1. 您的运算符==应该是const成员并采用const引用参数

  2. 你的算子==最好是一个自由函数,或者两个参数不会以相同的方式处理转换,你有一个从字符串到帐户的隐式转换。

  3. 这种隐式转换真的需要吗?

  4. 您有公共数据成员是帐户。是真的想要吗?