【问题标题】:Equality Operator Overloading in AllegroAllegro 中的等式运算符重载
【发布时间】:2011-09-13 17:56:58
【问题描述】:

我的一个朋友试图重载一个相等运算符来比较 Allegro 中的颜色,但是它不起作用,他得到错误“与运算符== 不匹配这是在 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 中的 ALLEGRO_COLOR 之外定义和实现的,对吧?这个问题怎么解决,能不能在 Allegro Color 结构体之外重载。

【问题讨论】:

  • 你能提供一个最小的、完整的程序来说明你的问题吗?从您的代码摘录来看,您的 operator== 似乎是某个类的成员函数;对吗?
  • 虽然很高兴知道您这样做是为了“您的朋友”,但在 SO 上可能不需要这种细节。一般来说,问题越短越好。

标签: c++ operator-overloading allegro


【解决方案1】:

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;

【讨论】:

  • 我清楚地将他的成员-一些未命名类operator== 误认为是一个编码不良的非成员函数。不过,我想我会等待 OP 在更正自己之前发布一个更接近完整的示例。
  • 这会起作用,但还有两件事需要考虑:1) r/g/b 是浮点数 (0.0-1.0),因此您可能需要为模糊匹配引入 delta 值。或不。取决于你想做什么。 2) 颜色也有一个 alpha (a) 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2016-06-26
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多