S Steady Medlem sedan dec. 2004 225 inlägg Frågan 24 feb. 2010 12:49 #1 Hej!
Sjukt länge sen man hängde på det här forumet, gillar att ni inte bytt färgtema än, känner sig fortfarande hemma :D
Har ett problem med en gnutta kod. Jag är helt ny på C++, har gjort en del i C och C# innan, men främst PHP och Java.
Anyhow, here's the deal:
Jag har skapat några fördefinerade rader som ser ut såhär:
#define APP_STATE_IDLE 0;
#define APP_STATE_SCANNED 1;
#define APP_STATE_ANIMATE 2;
#define APP_STATE_COMPLETE 3;
Problemet är nu när jag försöker använda dessa så går det inte att använda dem i t.ex. case och if-satser, typ såhär:
switch (APP_STATE) {
case APP_STATE_IDLE: // <-- ger felmeddelande "Expected ':' before ';' token"
cout << "idle" << endl;
APP_STATE = APP_STATE_SCANNED; // <-- ger inget felmeddelande
break;
default:
break;
}
Hur kommer sig detta? Det blir samma fel när jag skriver
if (APP_STATE > APP_STATE_SCANNED) {
}
Hoppas någon kan "shed some light" på det här, för jag är clueless.
Tack!
#define är inte en del av språket C/C++, utan hanteras av den så kallade preprocessorn innan koden kompileras. Vad #define gör är enkel sträng-ersättning. T ex ber du preprocessorn ersätta alla förekomster av APP_STATE_IDLE med 0;
Alltså ser kompilatorn case 0;: som är fel av uppenbara skäl.
Av samma anledning bör du använda parenteser både runt in-argumenten och hela uttrycket om du använder någon operator i definitionen:
Fel
#define multiply( n1,n2 ) n1*n2
x=2/sum(5+8, 3+6);
-> x=2/5+8*3+6;
Rätt
#define multiply( n1,n2 ) ( (n1)*(n2) )
x=2/sum(5+8, 3+6);
-> x=2/( (5+8)*(3+6) );
S Steady Medlem sedan dec. 2004 225 inlägg . (y)
Tusen tack, det låter mer logiskt, vet inte riktigt hur jag tänkte när jag skrev semikolon efter varje rad.