2013-10-28 81 views
0

我試圖在我創建的類中重載運算符<<,該類中創建的類比較兩個字符串,而不管大小寫。這裏是我的布爾運算符在嘗試比較字符串時,C++中的運算符重載錯誤

friend bool operator <<(const string& member, const string& player) { 
    return toLowerCase(member) == toLowerCase(player); 
} 

程序在我的代碼

current->name << member 

現在目前這個點返回一個錯誤是一個指向包含一個字符串名稱和成員的節點是一個字符串,它是在提示用戶時通過引用傳遞。我得到的錯誤是

invalid operands to binary expression('string'(aka'basic_string<char>') and 'string') 
+9

使用''<<一個比較肯定違反了最小驚訝的原則。 – juanchopanza

+0

@juanchopanza和即使使用標準庫類型;可憐這個可憐的傢伙試圖將他的字符串打印到'std :: cout' ... – nijansen

+0

你是如何實現toLowerCase功能的?如果兩個字符串相等,則輸出 –

回答

1

該錯誤信息顯示它不是拿起你的過載,但試圖使用內置位位移操作上string S(和失敗,當然)。根據你提供的信息,我不確定爲什麼。

無論如何,一個更好的主意是使用非成員,非運營商compare()功能 - 使用operator<<比較字符串只是要混淆地獄出任何人在看你的代碼(即使你,幾年的時間)。

0

舉動,聲明你的類並刪除friend關鍵字:

bool operator <<(const string& member, const string& player) 
{ 
    return toLowerCase(member) == toLowerCase(player); 
} 

Live code.