g++ 사용법 - C++에서 추가 자격 오류




구글 로그인 (5)

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

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::ParseValue 없다는 사실에서 JSONDeserializer::ParseValue 오류입니다.

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

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

소스를 컴파일하면 얻을 수 있습니다.

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

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


이 선을 클래스 선언 안에 넣고 있습니까? 이 경우 JSONDeserializer:: 제거해야합니다.


이것은 클래스가 클래스 함수로 중복 언급된다는 것을 의미합니다. JSONDeserializer:: 제거 JSONDeserializer::


가독성 / 유지 가능성에 대한 가치있는 메모 :

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

다른 사람들이 언급 한 바와 같이 클래스 선언문에 한정자가 없으면 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가 여러 클래스의 메소드를 구현할 때 정의를 보면 누가 누구에게 속하는지 알 수 있습니다.


그냥 호기심에서 나는 두포에서 일어나는 일을 살펴 dtruss/strace 각 테스트마다 dtruss/strace 를 사용 dtruss/strace .

C ++

./a.out < in
Saw 6512403 lines in 8 seconds.  Crunch speed: 814050

syscalls sudo dtruss -c ./a.out < in

CALL                                        COUNT
__mac_syscall                                   1
<snip>
open                                            6
pread                                           8
mprotect                                       17
mmap                                           22
stat64                                         30
read_nocancel                               25958

파이썬

./a.py < in
Read 6512402 lines in 1 seconds. LPS: 6512402

syscalls sudo dtruss -c ./a.py < in

CALL                                        COUNT
__mac_syscall                                   1
<snip>
open                                            5
pread                                           8
mprotect                                       17
mmap                                           21
stat64                                         29






c++ g++ compiler-errors