我正在尝试比较两个std::map
,并且编译器拒绝它,因为它找不到(==)运算符。
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(275): error C2678: binary '==': no operator found which takes a left-hand operand of type 'const foo::Value' (or there is no acceptable conversion)
以下是一个例子。
namespace foo {
struct Key { int k; };
struct Value { int val; };
typedef std::map<Key*,Value> Map;
}
bool operator==(const foo::Value &v1, const foo::Value &v2)
{
return v1.val == v2.val;
}
bool operator!=(const foo::Value &v1, const foo::Value &v2)
{
return !(v1 == v2);
}
bool compare(foo::Map &to, const foo::Map &from)
{
return to != from;
}
如果我删除命名空间,它就可以。
如果将==运算符定义为成员,则可以正常运行。
例如:
struct Value {
int val;
bool operator==(const Value &v) const { return val == v.val; }
bool operator!=(const Value &v) const { return val != v.val; }
};
// elide the other == and !=
我做错了什么?对于我的情况,我更喜欢(==)
函数是编译单元的本地函数而不是接口。
答案 0 :(得分:3)
如果将运算符放在名称空间foo
中,那么它就可以运行。