web-dev-qa-db-de.com

ausdrückliche Qualifikation in der Erklärung

battleutils.cpp: 1037: Fehler: explizite Qualifikation in der Deklaration von 'int32 battleutils :: AbilityBenediction (CBattleEntity *, CBattleEntity *)'

Was bedeutet dieser Fehler genau?

Die erste Zeile hier ist 1037 (in battleutils.cpp):

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

In der Header-Datei unter:

namespace battleutils
{

ist das:

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

Die CPP-Datei enthält die Headerdatei korrekt.

20
Zeno

Ich bin auf dasselbe Problem gestoßen. Ich hatte einen Quellcode, der mit MS Visual Studio kompiliert wurde, aber mit g ++ unter Linux gab es mir:

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

Es scheint, dass dieser Fehler auftritt, wenn sich die Implementierung bereits in namespace foospace {...} befindet und die Implementierung den Namespace erneut int foospace::barfunction(int blah){return 17;} angibt.

Befindet sich die Implementierung (der Code in Ihrer CPP-Datei) bereits in namespace foospace {...}, entfernen Sie foospace:: aus der Funktionsdefinition.

15
Benrobot

Nun, dies ist keine Antwort auf diese spezielle Frage. Da dies jedoch das erste Ergebnis der Google-Suche bei der Suche in dieser Fehlermeldung ist, kann es sein, dass ich diese Fehlermeldung erhalte, wenn ich den doppelten Namespace deklariert habe (wenn nicht benötigt). - so was

fehler: explizite Qualifikation in Deklaration von ...

namespace foo {

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

}

Anfängerfehler. Überprüfen Sie Ihre Namespaces. Entweder fehlt ein oft deklarierter oder falscher Namespace - würde ich annehmen.

5
O95

Entschuldigung, wenn oben bereits erwähnt. Ich bin hier gelandet, weil ich von MSVC (Windows) auf meine Archlinux-Installation umgestiegen bin, um Cross-Compile effektiv zu testen.

"Seien Sie sich bewusst", dass MSVC (Visual Studio) für die Verwendung von Namespace-Zusatzqualifikationen zulässig ist - zumindest mit der Option/W1 (Warnungen der Ebene 1), wodurch die Zusatzqualifikation ignoriert wird (expliziter Namespace in sich selbst). Beachten Sie, dass entweder in gcc; klirren; msvc, dieser Fehler tritt nicht bei Klassenmitgliedern und Funktionsparametern auf, und das ist es, was mich an diesem zusätzlichen Qualifizierungsfehler verwirrt, der nur bei "unit/file" -Funktionen auftritt ...

0
Bretzelus