Extra kwalificatiefout in C++

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::ParseValueis 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();
};

Other episodes