C ++의 추가 자격 오류 나타납니다. 오류 : 멤버 ‘ParseValue’에

다음과 같이 정의 된 멤버 함수가 있습니다.

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);

소스를 컴파일하면 다음과 같은 결과가 나타납니다.

오류 : 멤버 ‘ParseValue’에 대한 추가 자격 ‘JSONDeserializer ::’

이게 뭐야? 이 오류를 어떻게 제거합니까?



답변

다음 코드가 있기 때문입니다.

class JSONDeserializer
{
    Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};

이것은 유효한 C ++가 아니지만 Visual Studio에서 허용하는 것 같습니다. 표준 준수 컴파일러로 컴파일하려면 다음 코드로 변경해야합니다 (이 시점에서 gcc는 표준을 더 준수 함).

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};

오류 JSONDeserializer::ParseValue는 정규화 된 이름 (네임 스페이스 한정이있는 이름) 이라는 사실에서 발생 하며 이러한 이름은 클래스의 메서드 이름으로 금지됩니다.


답변

이것은 클래스가 클래스 함수로 중복 언급됨을 의미합니다. 제거해보십시오JSONDeserializer::


답변

이 줄을 클래스 선언 안에 넣 습니까? 이 경우 JSONDeserializer::.


답변

가독성 / 유지 보수에 대한 가치있는 참고 사항 :

JSONDeserializer::구현 파일 (* .cpp)에서 정의와 함께 한정자를 유지할 수 있습니다 .

클래스 내 선언 (다른 사람이 언급했듯이)에 한정자가없는 한 g ++ / gcc는 잘 작동합니다.

예를 들면 :

myFile.h에서 :

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};

그리고 myFile.cpp에서 :

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString)
{
    do_something(type, valueString);
}

myFile.cpp가 많은 클래스의 메서드를 구현할 때 정의를보고 누가 누구에게 속하는지 알 수 있습니다.


답변