當我嘗試的元素插入到一個unordered_set我得到這個錯誤:unordered_set:無效操作數爲二進制表達式(「常量播放」和「常量播放」)
error: invalid operands to binary expression ('const Play' and 'const Play')
{return __x == __y;}
這裏的截圖整個錯誤: https://www.dropbox.com/s/nxq5skjm5mvzav3/Screenshot%202013-11-21%2020.11.24.png
這是我的散列函數:
struct Hash {
size_t operator() (Play &play) {
unsigned long hash = 5381;
int c;
string s_str = play.get_defense_name() + play.get_offense_name() + play.get_description();
const char * str = s_str.c_str();
while ((c = *str++))
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
cout << hash << endl;
return hash;
}
};
這是我宣佈unordered_list:
unordered_set<Play, Hash> Plays;
這是我的重載我Play
類==
:
friend bool operator== (Play& p1, Play& p2)
{
return
(p1.get_defense_name() == p2.get_defense_name()) &&
(p1.get_offense_name() == p2.get_offense_name()) &&
(p1.get_description() == p2.get_description());
}
任何想法可能是怎麼回事?
謝謝。
試着改變你的'運營商的簽名=='使用'const'。就像在'friend bool operator ==(const Play&p1,const Play&p2)'中一樣。邏輯運算符最好不要改變他們正在比較的對象。 –