S Steady Medlem sedan dec. 2004 225 inlägg Trådstart 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
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 .
Tusen tack, det låter mer logiskt, vet inte riktigt hur jag tänkte när jag skrev semikolon efter varje rad.