errore di qualificazione extra in C ++

Ho una funzione membro definita come segue:

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

Quando compilo il codice sorgente, ottengo:

errore: qualifica aggiuntiva ‘JSONDeserializer ::’ sul membro ‘ParseValue’

Cos’è questo? Come rimuovo questo errore?

Questo perché hai il seguente codice:

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

Questo non è C ++ valido ma Visual Studio sembra accettarlo. È necessario modificarlo con il codice seguente per poterlo compilare con un compilatore conforms allo standard (gcc è più conforms allo standard su questo punto).

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

L’errore deriva dal fatto che JSONDeserializer::ParseValue è un nome qualificato (un nome con una qualifica di namespace) e tale nome è proibito come nome di un metodo in una class.

Ciò significa che una class viene citata in modo ridondante con una funzione di class. Prova a rimuovere JSONDeserializer::

Stai inserendo questa frase nella dichiarazione di class? In tal caso, rimuovere JSONDeserializer:: .

Una nota degna di leggibilità / manutenibilità:

È ansible mantenere il qualificatore JSONDeserializer:: con la definizione nel file di implementazione (* .cpp).

Finché la tua dichiarazione in class (come menzionato da altri) non ha il qualificatore, g ++ / gcc giocherà bene.

Per esempio:

In myFile.h:

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

E in myFile.cpp:

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

Quando myFile.cpp implementa metodi di molte classi, aiuta a sapere chi appartiene a chi, semplicemente guardando la definizione.