我遇到了二元operator==
的奇怪问题
我有一个函数返回:
Type< Colors >* get();
,T
的类型为enum Colors {Red,Black}
我将operator==
定义为:
bool operator==(Type<Colors>* left, Colors right)
{
//...
}
现在,在代码中我有一行:
if (get() == Red)
{
//
}
但是我在这里得到错误说:
error C2679: binary '==' : no operator found which takes a right-hand operand of type 'Colors' (or there is no acceptable conversion)
1> could be 'built-in C++ operator==(Node<Key_T,Value_T> *, Node<Key_T,Value_T> *)'
1> with
1> [
1> Key_T=int,
1> Value_T=int
1> ]
or 'bool operator ==(const Type<T> *,const Colors)'
1> with
1> [
1> T=Colors
1> ]
1> while trying to match the argument list '(Node<Key_T,Value_T> *, Colors)'
1> with
1> [
1> Key_T=int,
1> Value_T=int
1> ]
显然第二场比赛是我打算使用的,它是完美的比赛,但它不想;)编译。我做错了什么?
答案 0 :(得分:2)
(这比答案本身更具诊断性......但对评论来说太过分了。)
GGC 4.5.2适用于我:
enum Colour { Red, Black };
template <typename T>
struct Type { };
bool operator==(Type<Colour>*, Colour) { return true; }
int main()
{
Type<Colour>* p;
return p == Black;
}
请在您的编译器上尝试以上操作并发布错误消息(如果有)。如果没有,请发布您的EXACT完整程序,因为错误可能是您未发布的一些微妙内容。
答案 1 :(得分:0)
函数operator==
既不修改左或右?
然后把const放在那里它会起作用。