2011-09-13 11 views
1

내 친구 중 하나가 Allegro에서 색상을 비교하는 동등 연산자를 오버로드하려고 시도하지만 작동하지 않지만 "연산자와 일치하지 않음 =="오류가 발생합니다.이 오류는 Color 클래스 외부에서 오버로드됩니다/구조체, 오버로드 된 연산자 함수는 다음과 같습니다 :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

"친구"에게이 일을하고 있다는 것을 알아두면 좋겠지 만, 이런 종류의 세부 사항은 아마 그렇게 할 필요가 없을 것입니다. 일반적으로 질문이 짧을수록 좋습니다. –

답변

3

operator==은 2 진수 연산자이지만 매개 변수는 하나뿐입니다. 이 시도 :

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

잘못 코딩 된 비회원 함수에 대해 멤버의 일부 unnamed class 인 operator ==를 잘못 이해했습니다. 나는 OP가 자신을 바로 잡기 전에 좀 더 완벽한 예제를 게시 할 때까지 기다릴 것이라고 생각한다. –

+0

이 작업은 가능하지만 고려해야 할 두 가지 사항이 있습니다. 1) r/g/b는 부동 소수점 수 (0.0-1.0)이므로 퍼지 매치에 델타 값을 도입 할 수 있습니다. 아니. 당신이하고 싶은 일에 달려 있습니다. 2) 색상 또한 알파 (a) 값을가집니다. – Matthew