답변:
다음 코드가 있기 때문입니다.
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::
구현 파일 (* .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가 많은 클래스의 메서드를 구현할 때 정의를보고 누가 누구에게 속하는지 알 수 있습니다.
JSONDeserializer::
cpp 파일 (또는 일반 정의)의 경우 필수입니다. 그렇지 않으면 정의되지 않은 참조를 얻습니다. coliru.stacked-crooked.com/a/8f8a0cd3f9db6c94 coliru.stacked-crooked.com/a/6cd1efe94c09d521