2011-06-11 47 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. 您有公開數據成員是帳戶。這是真的嗎?