Verwachte niet-gekwalificeerde id voor numerieke constante voor het definiëren van een getal

Ik ben nieuw in C++, dus ik weet niet wat ze bedoelen met deze fout in een voorbeeld van een phidget-code:

Main.cpp:8:16: fout: verwachte niet-gekwalificeerde id vóór numerieke constante

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

Is er een syntaxisfout? Of iets anders? Ik gebruik #define in plaats van int.

EDIT: volledig foutenlogboek toegevoegd..

volledig foutenlogboek: http://pastebin.com/3vtbzmXD

Volledige main.cpp-code: http://pastebin.com/SDTz8vni


Antwoord 1, autoriteit 100%

De volledige fout is

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

Je probeert een variabele met dezelfde naam als een macro te declareren, maar dat lukt niet. De preprocessor is al over het programma gestampt en heeft dat veranderd in string 1234;, wat geen geldige declaratie is. De preprocessor heeft geen kennis van de programmastructuur en macro’s volgen de reikwijdteregels van de taal niet.

Gebruik waar mogelijk taalfuncties zoals constanten en inline-functies in plaats van macro’s. In dit geval kunt u gebruik maken van

const int homeid = 1234;

Dit valt binnen de globale naamruimte en kan veilig worden verborgen door iets met dezelfde naam in een smaller bereik. Zelfs als het verborgen is, is het altijd beschikbaar als ::homeid.

Als je echt een macro nodig hebt, is het verstandig om de conventie te volgen van het gebruik van SHOUTY_CAPSvoor macro’s. Het vestigt niet alleen de aandacht op de mogelijke gevaren en vreemdheden die samenhangen met het gebruik van macro’s, maar zal ook niet botsen met een naam die een ander hoofdlettergebruik gebruikt.


Antwoord 2, autoriteit 44%

Die regel is prima.

Wat hoogstwaarschijnlijk gebeurt, is dat de compiler niet klaagt over de macrodefinitie zelf, maar over het gebruikvan de macro. Voorbeeld:

#define homeid 1234
void homeid() {
}

Als ik dit compileer met GCC, krijg ik:

so.cc:1:16: fout: verwachte niet-gekwalificeerde id vóór numerieke constante
 #define homeid 1234
        ^
so.cc:3:6: opmerking: in uitbreiding van macro ‘homeid’
 ongeldige homeid() {
   ^

Dit vertelt je dat de numerieke constante die aanleiding geeft tot de klacht deel uitmaakt van de macrodefinitie, maar ook dat die macro gebruikt(in dit geval schijnbaar per ongeluk) op regel 3. Kijk eens naar waar de macro-uitbreiding vandaan komt in uw code.

Other episodes