unordered_set:二进制表达式的操作数无效("const Play"和"const Play")
unordered_set: invalid operands to binary expression ('const Play' and 'const Play')
当我试图将一个元素插入到一个无序集合中时,会出现这个错误:
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_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 Play
和const Play
,但您只为Play
提供operator ==
friend bool operator== (const Play& p1, const 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());
}
看起来无序集想要比较常量Play
对象,但您的==
可以比较非常量对象。由于不允许删除常量,因此编译器会产生错误。添加常量应该可以解决问题:
friend bool operator== (const Play& p1, const Play& p2)
您也应该将const
添加到operator()
中:
size_t operator() (const Play &play)