Перегрузка оператора равенства в Allegro - PullRequest
1 голос
/ 13 сентября 2011

Один из моих друзей пытается перегрузить оператор равенства для сравнения цветов в 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_COLOR в Allegro, верно? Как решить эту проблему, возможно ли перегрузка вне структуры Allegro Color.

1 Ответ

3 голосов
/ 13 сентября 2011

operator== - бинарный оператор, но у вас есть только один параметр.Попробуйте это:

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

Postscript : код этой формы:

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;
...