二进制问题==

时间:2011-07-28 08:19:37

标签: c++

我遇到了二元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>          ]

显然第二场比赛是我打算使用的,它是完美的比赛,但它不想;)编译。我做错了什么?

2 个答案:

答案 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放在那里它会起作用。