Ik heb een lidfunctie die als volgt wordt gedefinieerd:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
Wanneer ik de bron compileer, krijg ik:
FOUT: extra kwalificatie ‘Jsondeserializer ::’ op lid ‘Parsevalue’
Wat is dit? Hoe verwijder ik deze fout?
Antwoord 1, Autoriteit 100%
Dit komt omdat u de volgende code hebt:
class JSONDeserializer
{
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};
Dit is niet geldig C++, maar visuele studio lijkt het te accepteren. U moet het wijzigen in de volgende code om deze te kunnen compileren met een standaard compliant compiler (GCC voldoet aan de norm op dit punt).
class JSONDeserializer
{
Value ParseValue(TDR type, const json_string& valueString);
};
De fout komt van het feit dat JSONDeserializer::ParseValue
is een gekwalificeerde naam (een naam met een namespace-kwalificatie), en een dergelijke naam is verboden als een methode-naam in een klasse.
Antwoord 2, Autoriteit 9%
Dit betekent dat een klasse wordt vermeld met een klassenfunctie. Probeer het verwijderen van JSONDeserializer::
Antwoord 3, Autoriteit 6%
Zet u deze lijn binnen The Class-aangifte? In dat geval moet u de JSONDeserializer::
verwijderen.
Antwoord 4, Autoriteit 3%
een waardige noot voor leesbaarheid / onderhoudbaarheid:
U kunt de kwalificatie JSONDeserializer::
behouden met de definitie in uw implementatiebestand (*.cpp).
Zolang je in-class declaratie (zoals vermeld door anderen) de kwalificatie niet heeft, zal g++/gcc leuk zijn.
Bijvoorbeeld:
In mijnBestand.h:
class JSONDeserializer
{
Value ParseValue(TDR type, const json_string& valueString);
};
En in myFile.cpp:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString)
{
do_something(type, valueString);
}
Als myFile.cpp methoden uit veel klassen implementeert, helpt het om te weten wie bij wie hoort, gewoon door naar de definitie te kijken.
Antwoord 5
Ik zag deze fout toen in mijn headerbestand haakjes sluiten.
Veroorzaakt deze fout:
// Obj.h
class Obj {
public:
Obj();
Deze fout oplossen:
// Obj.h
class Obj {
public:
Obj();
};