2011-09-13 14 views
1

私の友人の1人が、Allegroの色を比較するための等価演算子をオーバーロードしようとしていますが、動作しません。 "演算子=="と一致しません。 /構造体、オーバーロードされた演算子関数を以下に示します。Allegroの等価演算子オーバーロード

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 Color構造体の外にオーバーロードすることが可能ですか?

+0

はあなたの問題を示し、最小限の、完全なプログラムを提供することができますか?あなたのコードを抜粋して判断すると、 'operator =='はあるクラスのメンバ関数であるようです。あれは正しいですか? –

+0

"あなたの友人"のためにこれをやっていることを知ってうれしいことですが、このような詳細はおそらくSOには必要ないでしょう。一般的に、質問が短いほど良い。 –

答えて

3

operator==はバイナリ演算子ですが、パラメータは1つのみです。

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; 
+0

私は明らかに、メンバではないクラスのメンバではないメンバ関数に対して誤った名前のクラスの 'operator =='を間違えています。私はOPが自分自身を修正する前にもっと完全な例を投稿するのを待つと思う。 –

+0

これはうまくいきますが、考慮すべき点が2つあります。1)r/g/bは浮動小数点(0.0〜1.0)なので、ファジーマッチにデルタ値を導入することができます。か否か。あなたがしたいことに依存します。 2)色はアルファ(a)値も持っています。 – Matthew

関連する問題