web-dev-qa-db-fra.com

qualification explicite dans la déclaration

battleutils.cpp: 1037: erreur: qualification explicite dans la déclaration de 'int32 battleutils :: AbilityBenediction (CBattleEntity *, CBattleEntity *)'

Qu'est-ce que cette erreur signifie exactement?

La première ligne est 1037 (dans battleutils.cpp):

int32 battleutils::AbilityBenediction(CBattleEntity* PCaster, CBattleEntity* PTarget)
{
      ....
      return blah;
}

Dans le fichier d'en-tête sous:

namespace battleutils
{

est-ce:

    int32   AbilityBenediction(CBattleEntity* PCaster, CBattleEntity* PTarget);

Le fichier .cpp inclut correctement le fichier d'en-tête.

20
Zeno

J'ai rencontré le même problème. Quelques sources compilées à l'aide de MS Visual Studio, mais utilisant g ++ sous Linux, m'ont donné:

... error: explicit qualification in declaration of '...

Il semble que cette erreur se produise lorsque l'implémentation est déjà dans namespace foospace {...} et que l'implémentation redonne à l'espace de noms int foospace::barfunction(int blah){return 17;}.

En gros, si l'implémentation (le code dans votre fichier .cpp) est déjà dans namespace foospace {...}, supprimez foospace:: de la définition de la fonction.

15
Benrobot

Eh bien, ce n’est pas une réponse à cette question particulière, mais comme il s’agit du premier résultat de la recherche Google lors de la recherche de ce message d’erreur, je pourrais simplement dire que j’ai eu ce message d’erreur lorsque j’avais déclaré deux fois l’espace de nom (s’il n’était pas nécessaire). - comme ça

erreur: qualification explicite dans la déclaration de ...

namespace foo {

    // REMOVE THIS "foo::" from here
    void foo::myFunction(int x) {
        // ...
    }

}

Erreur du débutant. Vérifiez vos espaces de noms. C'est manquant, plusieurs fois déclaré ou mauvais espace de noms - je suppose.

5
O95

Désolé si déjà mentionné ci-dessus. J'ai atterri ici parce que je suis passé de MSVC (Windows) à mon installation Archlinux pour tester efficacement la compilation croisée.

Donc, "Sachez-vous" que MSVC (Visual Studio) sera permissif en utilisant des qualifications supplémentaires d'espace de noms - au moins avec le commutateur/W1 (avertissements de niveau 1), ignorant ainsi la qualification supplémentaire (espace de noms explicite en lui-même). Notez que soit en gcc; bruit; msvc, cette erreur ne survient pas pour les membres de classe et les paramètres de fonction, ce qui me confond avec l'erreur de qualification supplémentaire appliquée uniquement aux fonctions "unité/fichier" ...

0
Bretzelus