2011-06-11 17 views
5

首先稍微回退一点,我使用模板创建了双向链表。我有一个“帐户”类,其中我已经超载了“==”运算符来比较帐户ID。我创建了一个链接列表来保存帐户。重载的操作符未被检测到

当我向列表中添加一个新帐户时,它会调用“contains?”方法调用==运算符。这是被调用错误和g ++告诉我

sll.h: In member function ‘bool list::contains(T) [with T = account]’:

customer.h:25:35: instantiated from here

sll.h:261:3: error: no match for ‘operator==’ in ‘temp->node::data == item’

account.h:36:6: note: candidate is: bool account::operator==(account&)

我已经调查了几个小时,现在我无法得到它的底部。我怀疑它可能与我使用模板的事实有关,我创建了测试程序以查看我是否正确地超载了操作员,并且它按预期工作。

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

作为代码是有些长我用pastie:

Linked list class

Account class

回答

6

您的运算符==将正确的参数作为非const引用,而您尝试与常量参数进行比较。顺便说一句,你的operator ==也是一个非const成员。

  1. 你的==操作符应该是一个const成员,并采取放慢参数

  2. 你的==操作符const引用会更好做一个自由的功能或两个参数不会在被处理同样的方式进行转换,并且您有从字符串到帐户的隐式转换。

  3. 难道是隐式转换吗?

  4. 您有公开数据成员是帐户。这是真的吗?