2014-12-17 9 views
16

Sono nuovo di C++, quindi non so cosa vogliono dire con questo errore in un esempio phidget-code:Previsto incondizionato-id, prima costante numerica per la definizione di un numero

Main.cpp:8:16: error: expected unqualified-id before numeric constant

//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 

C'è un errore di sintassi? O qualcos'altro? Io uso #define invece di int.

EDIT: aggiunto piena log degli errori ..

complete error-log: http://pastebin.com/3vtbzmXD

Full main.cpp code: http://pastebin.com/SDTz8vni

+6

Avrai bisogno di mostrare più di 'Main.cpp'. –

+3

preferisci 'const int homeid = 1234;' oltre 'define'. – Jarod42

+0

@JosephMansfield Le direttive rientrate sono perfettamente valide. – hvd

risposta

14

L'errore completo è

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

Stai cercando di dichiarare una variabile con lo stesso nome di una macro, ma questo non può essere fatto. Il preprocessore ha già calpestato il programma, trasformandolo in string 1234;, che non è una dichiarazione valida. Il preprocessore non ha alcuna conoscenza della struttura del programma e le macro non seguono le regole dell'ambito del linguaggio.

Ove possibile, utilizzare le funzioni del linguaggio come le costanti e le funzioni inline anziché le macro. In questo caso, si potrebbe utilizzare

const int homeid = 1234; 

Questo sarà scope nel namespace globale, e può tranquillamente essere nascosta da qualcosa con lo stesso nome in un ambito più ristretto. Anche quando è nascosto, è sempre disponibile come ::homeid.

Quando è davvero necessaria una macro, è consigliabile attenersi alla convenzione sull'uso di SHOUTY_CAPS per i macro. Oltre a richiamare l'attenzione sui potenziali pericoli e le stranezze associate all'uso di macro, non si scontrerà con nessun nome utilizzando altre lettere maiuscole.

+0

Ho molto meno errori ora, ma ora ne ho uno nuovo che è questo: errore: inizializzatore previsto prima della costante numerica const int homeid 1234 –

+0

@ Kil'jaeden: Hai perso il '=' tra il nome della variabile e l'inizializzatore . –

+0

Grazie, l'ho risolto ... Ho un altro errore, ma questo non ha a che fare con questo. –

7

Quella linea va bene.

È probabile che il compilatore si stia lamentando non della definizione stessa della macro, ma dello utilizza la macro della macro. Esempio:

#define homeid 1234 

void homeid() { 
} 

Quando si compila questo con GCC, ottengo:

 
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() { 
    ^

Questo indica che la costante numerica che richiede la denuncia è parte della definizione di macro, ma anche che quella macro è usato (in questo caso apparentemente per caso) sulla riga 3. Dai un'occhiata a dove proviene l'espansione della macro nel tuo codice.

Problemi correlati