battleutils.cpp:1037: error: calificación explícita en la declaración de ‘int32 battleutils::AbilityBenediction(CBattleEntity*, CBattleEntity*)’

Lo que hace este error significa exactamente?

La primera línea aquí es 1037 (en battleutils.cpp):

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

En el archivo de encabezado en:

namespace battleutils
{

es este:

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

El .archivo cpp correctamente incluye el archivo de cabecera.

  • la votación para cerrar como «no contiene MCVE», no hay nada de malo con el código publicado
  • Una posible manera de que esto podría haber surgido es si usted se olvidó de un }, o no se dio cuenta de que ya había namespace battleutils en el archivo cpp. Por ejemplo, namespace N { int f(); int N::f() {} } da el mismo error. En este caso, la respuesta a la sugerencia de solución de namespace N { int f(); namespace N { int f() {} } } podría ocultar el mensaje de error, pero en realidad definir una función diferente N::N::f. Yo personalmente prefiero usar el explícito título en mi propio código para que un mensaje de error se genera si los parámetros no coinciden (en lugar de la sobrecarga o el ocultamiento de la intención de la función).
InformationsquelleAutor Zeno | 2011-12-11

3 Comentarios

  1. 24

    Me encontré con el mismo problema. Yo tenía una fuente que compila utilizando MS Visual Studio, pero el uso de g++ en Linux me dio:

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

    Parece que este error se produce cuando la aplicación ya está dentro de namespace foospace {...} y la aplicación le da el espacio de nombres nuevo int foospace::barfunction(int blah){return 17;}.

    Básicamente, si la aplicación (el código de usted .archivo cpp) ya está dentro de namespace foospace {...}, a continuación, quitar foospace:: a partir de la definición de la función.

  2. 8

    Bien, esto no es una respuesta a esta pregunta en particular, sino porque este es el primer resultado en la búsqueda de Google cuando se busca este mensaje de error, simplemente me podría decir que tengo este mensaje de error cuando me había declarado dos veces el espacio de nombres (cuando no es necesario) – como este

    de error: calificación explícita en la declaración de …

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

    Principiantes de error. Verificación de los espacios de nombres. Es falta, muchas veces declarada o mal de espacio de nombres – quiero suponer.

  3. 0

    Lo siento si ya se ha mencionado anteriormente.
    Aterricé aquí porque he cambiado de MSVC (Windows) para mi Archlinux instalación para las pruebas de cross-compile de forma efectiva.

    Por lo que «Ser Consciente» de que MSVC (Visual Studio) va a ser más permisiva con el uso de espacio de nombres extra cualificaciones – al menos con el /W1 interruptor (nivel 1 avisos), ignorando la cualificación complementaria (explícito de espacio de nombres dentro de sí mismo). Observe que en gcc; ruido; msvc, este error no ocurre para los miembros de la clase y los parámetros de la función y que es lo que me confunde acerca de que extra la calificación de error sólo se aplica en la «unidad/archivo» funciones…

Dejar respuesta

Please enter your comment!
Please enter your name here