1

我的一个朋友试图重载一个相等运算符来比较 Allegro 中的颜色,但是它不起作用,他收到错误“no match for operator==” 这是在 Color 类/结构之外重载的,重载的运算符函数是如下图:

typedef ALLEGRO_COLOR Color;
bool operator==(const Color& rhs) const
{
 if(_col.a==rhs.a && _col.b==rhs.b && _col.g==rhs.g && _col.r==rhs.r)
 return true;
 else
 return false;
}
.
.
.
//Data member
Color _col

我认为这不起作用,因为运算符是ALLEGRO_COLOR在 Allegro 之外定义和实现的,对吧?如何解决这个问题,是否可以在 Allegro Color 结构之外重载。

4

1 回答 1

3

operator==是二元运算符,但您只有一个参数。尝试这个:

bool operator==(const Color& _col, const Color& rhs) { ... }


后记:这种形式的代码:

if ( condition )
    return true;
else
    return false;

在 C++ 中是不必要的冗长。最好这样做:

return condition;

在您的情况下,我希望看到:

return _col.a==rhs.a && _col.b==rhs.b && _col.g==rhs.g && _col.r==rhs.r;
于 2011-09-13T18:03:32.663 回答