2009-10-03 10 views
0

나는 다음과 같은C++ 과부하 연산자 ==

bool DistinctWord::operator==(const DistinctWord W) const 
{ 
    return strWord == W.strWord; 
} 
bool DistinctWord::operator==(const DistinctWord& W) const 
{ 
    return strWord == W.strWord; 
} 

내 프로그램에서이 작업을하고 있어요와 클래스가

DistinctWord* wordOne = new DistinctWord("Test"); 
    DistinctWord* wordTwo = new DistinctWord("Test"); 

    if(*wordOne == *wordTwo) 
     cout << "true"; 
    else 
     cout << "false"; 

는이 오류를

오류 C2678을 얻을 : 진 ' == ':'DistinctWord '유형의 왼쪽 피연산자를 사용하는 연산자가 없습니다 (또는 허용되는 변환이 없음) 은'내장 C++ 연산자 == (DistinctWord *, DistinctWord *, DistinctWord *

) '

나는 오버로드 할 수있는 올바른 방법을 모르겠다.

간단한 질문을 드려 죄송합니다. TIA

+5

'Word'의 상속 나무 란 무엇입니까? – strager

+1

어떤 유형이'strWord'입니까? 또한 오류에 대한 특정 줄을 제공합니까? – Twisol

+0

@Jeremiah : 내 최근의 (상단의) 편집을 참조하십시오. 그것은 당신이 필요로하는 해결책을 가지고 있습니다. –

답변

5

편집 :

OK, 나는 당신의 문제를 알아 냈어요. operator==의 비표준 버전입니다. operator==이 모호합니다. 단순히 (원래 제안한대로) 제거하면 잘 작동합니다.


편집 :

귀하의 편집에 대응하여, 여전히 operator==의 첫 번째 버전을 해당 객체의 복사본을 만든 다음 비교 할 필요가 없습니다 제거해야합니다. 두 번째 operator==은 합리적인 것처럼 보이고 작동해야합니다. 당신이 빠져 나가는 다른 것이 있습니까?


편집 :

#include <iostream> 

struct DistinctWord { 
    DistinctWord(const std::string &s) : strWord(s){} 

    bool operator==(const DistinctWord& W) const { 
     return strWord == W.strWord; 
    } 

    std::string strWord; 
}; 


int main() { 
    DistinctWord* wordOne = new DistinctWord("Test"); 
    DistinctWord* wordTwo = new DistinctWord("Test"); 

    if(*wordOne == *wordTwo) 
     std::cout << "true"; 
    else 
     std::cout << "false"; 
} 

여전히 문제가 발생한다면, 당신은 모든 관련 코드가 표시되지 않는 : g ++ 4.4.1를 사용하여 나에게

다음 컴파일이 잘 ...


우선 def DistinctWord에 대한 이니셔티브 및 Word과 어떤 관련이 있습니까?

bool Word::operator==(const Word& W) const { 
    return strWord == W.strWord; 
} 

을하고 당신이 현재 가지고있는 두 operator== 년대를 제거 : 그 너머

, 당신은이 작업을 수행해야합니다. 첫 번째는 사본을 작성한 다음 어리석은 것을 비교하고 두 번째는 수정 가능한 참조를 비교하고 실제로 어떤 용도로도 사용되지 않는 true를 리턴합니다.

이 코드는 정상적으로 작동합니다.

+0

지금 내가 가진 것을 보여줍니다.여전히 오류가 있습니다. 두 가지 방법의 이유는 참조 또는 값으로 전달할 수 있습니다. 방금 테스트 목적으로 반환 사실을 배치했습니다. 도움 주셔서 감사합니다. – Jeremiah

+0

왜 값으로 전달 하시겠습니까? 전달해야 할 유일한 유용한 것들은 const ref 버전에서 허용되어야합니다. –

+0

당신의 프로젝트는 새로운 프로젝트에서 작동하지만 현재 프로젝트에서는 작동하지 않습니다. 나는 통과해서 내가 찾을 수있는 것을 볼 것입니다. 그 결과를 조금 더 게시 할 것입니다. 감사합니다 – Jeremiah