web-dev-qa-db-fra.com

erreur de qualification supplémentaire en C ++

J'ai une fonction membre qui est définie comme suit:

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

Lorsque je compile la source, je reçois:

erreur: qualification supplémentaire 'JSONDeserializer ::' sur le membre 'ParseValue'

Qu'est-ce que c'est? Comment puis-je supprimer cette erreur?

102
prosseek

C'est parce que vous avez le code suivant:

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

Ce n'est pas valide C++ mais Visual Studio semble l'accepter. Vous devez le remplacer par le code suivant pour pouvoir le compiler avec un compilateur conforme à la norme (gcc est plus conforme à la norme sur ce point).

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

L'erreur vient du fait que JSONDeserializer::ParseValue est un nom qualifié (un nom avec une qualification d'espace de noms), et un tel nom est interdit en tant que nom de méthode dans une classe.

188
Sylvain Defresne

Cela signifie qu'une classe est mentionnée de manière redondante avec une fonction de classe. Essayez de supprimer JSONDeserializer::

18
joe_coolish

Mettez-vous cette ligne dedans la déclaration de classe? Dans ce cas, vous devriez retirer le JSONDeserializer::.

13
Boaz Yaniv

ne note digne de lisibilité/maintenabilité:

Vous pouvez garder le JSONDeserializer:: qualificatif avec la définition dans votre fichier d'implémentation (* .cpp).

Tant que votre déclaration en classe (comme mentionné par d'autres) n'a pas le qualificatif, g ++/gcc jouera Nice.

Par exemple:

Dans myFile.h:

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

Et dans myFile.cpp:

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

Lorsque myFile.cpp implémente des méthodes de nombreuses classes, il est utile de savoir qui appartient à qui, en regardant simplement la définition.

6
bunkerdive