2012-10-15 4 views
0

나는 다음과 같은 컴파일 오류가 발생합니다 :C++ 템플릿 클래스 컴파일 오류

main.cc: In function 'int main(int, char**)':¶ 
main.cc:200: error: no match for 'operator==' in 'rt1 == rt2'¶ 
triple.hh:124: note: candidates are: bool Triple<T1, T2, T3>::operator==(const Triple<T1,T2, T3>&) [with T1 = int, T2 = int, T3 = int] <near match>¶ 
main.cc:27: note:     bool operator==(const Special&, const Special&)¶ 

내가 연산자를 구현했지만 == 과부하 내 템플릿 클래스에 대해 다음과 같이 내 템플릿 클래스에 대한

bool operator==(const Triple<T1, T2, T3>& another) { 
    return (a == another.first() and b == another.second() and c == another.third()); 
} 

:

template <typename T1, typename T2, typename T3> 
class Triple 

문제의 원인을 알고 계십니까? 많은 감사합니다.

+0

'특수'클래스 란 무엇입니까? – interjay

+1

'rt1'과'rt2'의 종류는 무엇입니까? – ecatmur

답변

1

부울 연산자는 비 const로 선언됩니다. rt1이 const 참조 인 경우 다음과 같이 수정하십시오. 추가 된 const 키워드를 확인하십시오.

bool operator==(const Triple<T1, T2, T3>& another) const { 

설명 : C++에는 비교 연산자가 오버로드되는 두 가지 기본 구문이 있습니다. 하나의 다른 인수를 갖는 구성원 연산자 또는 두 개의 인수가있는 정적 연산자. 그러나 두 경우 모두 각각의 구문과 함께 두 피연산자가 const인지 확인해야합니다.

미묘하게 다른 작업을 수행하는 다른 const 버전과 비 const 버전을 제공하는 것이 이론상 가능하므로 컴파일러는 거의 일치한다고하지만 일치하지는 않습니다.