1

私の友人の 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_COLORAllegro の外部で定義および実装されているため、これは機能しないと思いますよね? この問題をどのように解決できますか、Allegro Color 構造体の外でオーバーロードすることは可能ですか?

4

1 に答える 1

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;
于 2011-09-13T18:03:32.663 に答える