2013-12-14 1 views
0

String_Data 클래스에 대해 내 프로젝트에서 == 연산자를 재정의하려고합니다. String_Data에는 String_Data 객체에 보관 된 문자열을 반환하는 getString() 메서드가 있습니다. 두 String_Data 개체에 의해 보유 된 문자열을 비교하려면 내 == 재정의이 메서드를 호출하려면 노력하고있어. 그러나이 작업을 수행 할 때 인수로 사용하는 String_Data 객체에는 해당 메서드가 없다는 메시지가 표시됩니다. 무엇이 잘못 될지는 모르겠지만 어떤 도움을 주시면 감사하겠습니다. 여기 내 코드가있다.== 연산자를 오버라이드하는 동안 동일한 클래스의 메서드를 호출 할 수 없습니다. C++

#include "stdafx.h" 
#include <vector> 
#include <sstream> 
#include "String_Data.h" 

using namespace std; 

std::string myString; 
int stringCount; 

String_Data::String_Data(std::string URL, int useCount) 
{ 
    stringCount = useCount; 
    myString = URL; 
} 

String_Data::~String_Data(void) 
{ 
} 

bool operator == (String_Data sd, String_Data sd2) { 
return (sd.getString() == sd2.getString()); 
} 

std::string getString() { 
    return myString; 
} 
void increment() { 
    stringCount++; 
} 

bool compare() { 

} 

int getCount() { 
    return stringCount; 
} 

사전에 도움을 주셔서 감사합니다.

+2

. 그것을 포함하고 컴파일러 오류 –

+0

같음 연산자 대신 _override_보다는 _overload_를 원하는 것 같습니다. 유사한 이름이지만 다소 관련이 있지만 상당히 다릅니다. 게시 한 코드는 클래스 선언을 표시하지 않으며 게시 된 getString() 함수는 멤버가 아닙니다. –

+0

@ DietmarKühl 메소드가 인라인을 사용하여 클래스 선언 중간에있는 경우 일 수 있습니다. –

답변

0

위에 제공된 제한된 정보를 기반으로 String_Data 정의에 getString 메소드를 제대로 제공하지 않았다고 추측합니다. 당신이 operator ==에서 그것을 호출하려고하면 자연스럽게 컴파일러는 그 메소드가 존재하지 않는다고 불평 할 것입니다!

간단한 수정은 class String_Data에 방법을 제공하는 것입니다. 또한 myStringstringCount을 독립 실행 형 전역 변수가 아닌 실제로 String_Data의 구성원으로 사용하려는 것 같습니다.

// String_Data.h 
class String_Data 
{ 
    std::string myString; 
    int stringCount; 
public: 
    //... 
    std::string getString(); 
}; 

그리고 당신의 getString 무료 함수는 String_Data 방법으로 변환 할 필요가있다 : 귀하의 클래스 정의의 라인을 따라 더 보일 것이다 당신이에서 얻고있는 오류를 수정해야

std::string String_Data::getString() 
{ 
    return myString; 
} 

오버로드 된 operator ==. 아무것도 수정되고 있지 않기 때문에 operator ==는 const를 심판하여 인수를해야합니다 : 나는 연산 == 재정에서 아무것도를 호출하는 시도가 표시되지 않습니다

bool operator == (const String_Data &sd, const String_Data &sd2); 
관련 문제