簡體   English   中英

未檢測到重載運算符

[英]Overloaded operator doesn't get detected

先介紹一下背景知識,我使用模板制作了一個雙向鏈表。 我有一個“帳戶”class,其中我重載了“==”運算符來比較帳戶 ID。 我創建了一個鏈接列表來保存帳戶。

當我向列表中添加一個新帳戶時,它會調用“包含?” 調用 == 運算符的方法。 這是調用錯誤的地方,g++ 告訴我

sll.h:在成員 function 'bool list::contains(T) [with T = account]'中:

customer.h:25:35: 從這里實例化

sll.h:261:3: 錯誤: 'temp->node::data == item' 中的'operator==' 不匹配

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

我已經調查了幾個小時,但我無法深入了解它。 我懷疑這可能與我正在使用模板這一事實有關。我創建了測試程序以查看我是否正確地重載了運算符並且它按預期工作。

另請注意:有一個客戶 class 是其中包含的帳戶列表,這就是所謂的“添加”方法。 不幸的是,我不能發布超過 2 個超鏈接,所以請相信我的話,這個 class 是正確制作的。 =P

由於代碼有點長,我使用了餡餅:

鏈表 class

賬戶 class

當您嘗試與 const 參數進行比較時,您的 operator== 將其正確的參數作為非 const 引用。 順便說一句,您的 operator== 也是非 const 成員。

  1. 您的 operator== 應該是 const 成員並采用 const 參考參數

  2. 您的 operator== 最好是免費的 function ,否則這兩個參數將不會以相同的方式進行轉換,並且您有從字符串到帳戶的隱式轉換。

  3. 真的需要這種隱式轉換嗎?

  4. 您有公共數據成員是帳戶。 真的想要嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM