2011-07-28 5 views
2

바이너리 operator==에 이상한 문제가 있습니다. T 유형 enum Colors {Red,Black} 의 내가 같은 operator== 정의가, Type<Colors>* get();을 :바이너리 문제 =

if (get() == Red) 
{ 
// 
} 

그러나 여기 :

bool operator==(Type<Colors>* left, Colors right) 
{ 
//... 
} 

이제 코드에서 내가 라인을 가지고
나는 반환하는 기능을 가지고 다음과 같은 오류가 표시됩니다.

error C2679: binary '==' : no operator found which takes a right-hand operand of type 'Colors' (or there is no acceptable conversion) 
1>   could be 'built-in C++ operator==(Node<Key_T,Value_T> *, Node<Key_T,Value_T> *)' 
1>   with 
1>   [ 
1>    Key_T=int, 
1>    Value_T=int 
1>   ] 

or  'bool operator ==(const Type<T> *,const Colors)' 
1>   with 
1>   [ 
1>    T=Colors 
1>   ] 
1>   while trying to match the argument list '(Node<Key_T,Value_T> *, Colors)' 
1>   with 
1>   [ 
1>    Key_T=int, 
1>    Value_T=int 
1>   ] 

분명히 두 번째 매치는 내가 사용하려고했던 것이고 완벽한 매칭이지만 아직 원하지 않는다.) 컴파일하라. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+6

당신이 올린 오류 메시지는'get()'함수가'const Type *'이 아니라'Node *'를 반환한다고 말합니다. 적절한 객체에서'get()'을 호출하고 있습니까? – Pablo

+0

@Pablo 내가하는 것처럼 내게 보인다. – smallB

+1

get의 정의는 무엇입니까? –

답변

2

는 (이 대답 자체보다 더 많은 진단 ...하지만 주석에 대한 너무 많은 것입니다.)

가 GGC 4.5.2와 나를 위해 작동 확인 :

enum Colour { Red, Black }; 

template <typename T> 
struct Type { }; 

bool operator==(Type<Colour>*, Colour) { return true; } 

int main() 
{ 
    Type<Colour>* p; 
    return p == Black; 
} 

위를 시도하십시오 귀하의 컴파일러에 오류 메시지가 있으면 게시하십시오. 그렇지 않은 경우 게시하지 않은 미묘한 문제 일 수 있으므로 정확한 전체 프로그램을 게시하십시오.

+0

GCC 4.5.2와'operator ==()'반환 값 – iammilind

+0

@iammilind : 공정한 포인트 - 나는 원래 링크 오류가 발생했다는 것을 증명할 연산자를 선언했다. 그것은 완전히 컴파일되고 연결되어 있습니다 ... "true return; 던지다 (지금도 편집 됨). –

0

기능 operator==은 왼쪽 또는 오른쪽을 수정하지 않습니까?

그래서 const를 넣으면 작동합니다.

+0

틀린, 인수는 값으로 전달됩니다. 'const'는 필요 없습니다. –

+0

제시된 바와 같이, 이것은 비 멤버 함수이므로, 함수가 'const'일 수있는 객체가 존재하지 않습니다. 콘라드 (Konrad)는 함수 매개 변수 자체에 대한 가능성을 설명했습니다. –

+0

첫 번째 인수가 const 유형 * 유형 인 경우 함수가 포인터 값을 수정하지 않아도 컴파일되지 않습니다. 그것이 그가 할 수있는 곳에서 const를해야하는 이유입니다. – BenjaminB

관련 문제