Identificación no calificada esperada antes de la constante numérica para definir un número

4 minutos de lectura

Avatar de usuario de Kil'jaeden
Kil’jaeden

Soy nuevo en C ++, así que no sé qué significan con este error en un ejemplo de código phidget:

Main.cpp:8:16: error: ID no calificado esperado antes de la constante numérica

//verander de volgende informatie naar de informatie voor jouw database

#define dserver "oege.ie.hva.nl"
#define duser "username"
#define dpassword "password"
#define ddatabase "databasename"

#define homeid 1234 //line 8

¿Hay un error de sintaxis? ¿O algo mas? Uso #define en lugar de int.

EDITAR: se agregó el registro de errores completo.

registro de errores completo: http://pastebin.com/3vtbzmXD

Código completo main.cpp: http://pastebin.com/SDTz8vni

  • Tendrás que mostrar más de Main.cpp.

    –Joseph Mansfield

    17 dic 2014 a las 11:40


  • preferir const int homeid = 1234; encima define.

    – Jarod42

    17 de diciembre de 2014 a las 11:41

  • Tengo curiosidad por saber qué hay en las líneas 1..7

    – WhozCraig

    17 de diciembre de 2014 a las 11:43

  • @JosephMansfield Es posible que esté pensando en compiladores de C preestándar, que no siempre lo admitieron, pero el primer estándar de C y el primer estándar de C ++ lo permiten.

    usuario743382

    17 de diciembre de 2014 a las 11:44

  • Ahora sólo tiene que proporcionar la completo y no modificado salida de error

    – Un tipo programador

    17 dic 2014 a las 11:50

Avatar de usuario de Mike Seymour
mike seymour

El error completo es

error: expected unqualified-id before numeric constant
 note: in expansion of macro ‘homeid’
string homeid;
       ^

Está intentando declarar una variable con el mismo nombre que una macro, pero eso no se puede hacer. El preprocesador ya pisoteó el programa, convirtiéndolo en string 1234;, que no es una declaración válida. El preprocesador no tiene conocimiento de la estructura del programa y las macros no siguen las reglas de alcance del lenguaje.

Siempre que sea posible, use funciones de lenguaje como constantes y funciones en línea en lugar de macros. En este caso, podrías usar

const int homeid = 1234;

Esto tendrá un alcance en el espacio de nombres global y puede ocultarse de manera segura por algo con el mismo nombre en un alcance más limitado. Incluso cuando está oculto, siempre está disponible como ::homeid.

Cuando realmente necesita una macro, es aconsejable seguir la convención de usar SHOUTY_CAPS para macros Además de llamar la atención sobre los peligros potenciales y las rarezas asociadas con el uso de macros, no chocará con ningún nombre que utilice otras mayúsculas.

  • Tengo muchos menos errores ahora, pero ahora tengo uno nuevo que es este: error: inicializador esperado antes de la constante numérica const int homeid 1234

    – Kil’jaeden

    17 de diciembre de 2014 a las 12:06

  • @Kil’jaeden: Te perdiste la = entre el nombre de la variable y el inicializador.

    –Mike Seymour

    17 de diciembre de 2014 a las 12:07

  • Gracias, eso lo arregló… Tengo otro error, pero eso no tiene que ver con esto.

    – Kil’jaeden

    17 de diciembre de 2014 a las 12:11

  • Obtuve este error cuando las personas usaban cosas como “CONST” como parte de su nombre, pero el archivo windows.h lo reemplazaba con una macro. #undef se deshizo de él… raro…

    – rogerdpack

    11 de enero de 2019 a las 14:55


Esa línea está bien.

Lo más probable es que el compilador no se queje de la definición de la macro en sí, sino de la usar de la macro Ejemplo:

#define homeid 1234

void homeid() {
}

Al compilar esto con GCC, obtengo:

so.cc:1:16: error: expected unqualified-id before numeric constant
 #define homeid 1234
                ^
so.cc:3:6: note: in expansion of macro ‘homeid’
 void homeid() {
      ^

Esto le dice que la constante numérica que provoca la queja es parte de la definición de macro, pero también que esa macro es usado (en este caso, aparentemente por accidente) en la línea 3. Observe de dónde proviene la expansión macro en su código.

Avatar de usuario de Miguel Tomás
miguel tomás

Este error también ocurre cuando la constante numérica definida también se declara en otra parte del código. Por ejemplo, declarado como a continuación y llamado fuera de cualquier clase o función.

    #define MODEL_SELECT_PLOWMAN
    
    ....
    
    MODEL_SELECT_PLOWMAN


    void someFunc(){
       ...
    }

en este caso particular, #define homeid 1234 se declara correctamente sin embargo homeid es muy probable que esté fuera de lugar y repetido dentro del código (y sin #define)

¿Ha sido útil esta solución?