Risposte:
Questo perché hai il seguente codice:
class JSONDeserializer
{
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};
Questo non è un C ++ valido ma Visual Studio sembra accettarlo. È necessario modificarlo nel codice seguente per poterlo compilare con un compilatore conforme allo standard (gcc è più conforme 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 completo (un nome con una qualifica di spazio dei nomi) e tale nome è vietato come nome di metodo in una classe.
Ciò significa che una classe viene menzionata in modo ridondante con una funzione di classe. Prova a rimuovereJSONDeserializer::
Stai inserendo questa riga nella dichiarazione della classe? In tal caso dovresti rimuovere il file JSONDeserializer::
.
Una nota degna di leggibilità / manutenibilità:
È possibile mantenere il JSONDeserializer::
qualificatore con la definizione nel file di implementazione (* .cpp).
Finché la tua dichiarazione in classe (come menzionato da altri) non ha il qualificatore, g ++ / gcc funzionerà 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.
JSONDeserializer::
per il file cpp (o la definizione in generale) è richiesto. Altrimenti, ottieni un riferimento indefinito. coliru.stacked-crooked.com/a/8f8a0cd3f9db6c94 coliru.stacked-crooked.com/a/6cd1efe94c09d521