Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.04.2005, 00:59 Titel: #ifdef/#define-Problem |
|
|
Hallo alle zusammen, ich habe ein Problem mit #define und #ifdef:
Folgender Code:
CPP: | class CInput
{
public:
__forceinline bool KeyUp(BYTE Key);
__forceinline bool KeyDown(BYTE Key);
// [...]
};
//[...]
//#define KeyDown
#ifdef KeyDown
if(Input->KeyDown(DIK_LEFT))
{Var1=Var2; TueWas();}
else if(Input->KeyDown(DIK_RIGHT))
{...}
//[...]
#else //KeyDown
if(Input->KeyHit(DIK_LEFT))
{Var1=Var2; TueWas();}
else if(Input->KeyHit(DIK_RIGHT))
{...}
//[...]
#endif //KeyDown |
So, eigentlich alles OK... Input is ein Zeiger auf CInput... Wenn ich KeyDown nicht definiere, klappt alles... Aber wehe ich definiere KeyDown:
M$ VC++ 6.0 hat Folgendes geschrieben: | d:\...\XY.cpp(128) : error C2059: Syntaxfehler : '('
d:\...\XY.cpp(129) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
d:\...\XY.cpp(129) : error C2039: 'Var1' : Ist kein Element von 'CInput'
d:\...\input.cpp(15) : Siehe Deklaration von 'CInput'
[...]
Mesh_Test.exe - 57 Fehler, 0 Warnung(en) |
Zeile 128 ist diese if-Bedingug:
CPP: | if(Input->KeyDown(DIK_LEFT)) | , also direkt die erste IF-Bedingung. Ein Test ergibt, dass er das zweite '(' net mag, also die nach KeyDown, wenn ich KeyDown durch KeyHit ersetze gehts übrigens...
Warum geht es, wenn ich KeyDown nicht definiere, aber nicht, sobald KeyDown definiert ist? Ich bin am verzweifeln... Das klingt für mich einfach nach Blödsinn... Hat der VC++ 6.0 da nen Bug?
Gruß
FH
<edit>
Wieso is das __forceinline als KeyWord definiert? Das is doch eigentlich ein M$-Konstrukt, oder???
</edit> _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 03.04.2005, 01:04 Titel: |
|
|
Du weißt schon das #define für den Präprozessor da ist und keinerlei einwirkung hat auf das Fertige Compilat?
Warum __forceinline hervorgehoben ist bei VC++6? Warum wohl? Überleg mal wer VC++ hergestellt hat  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.04.2005, 01:09 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Du weißt schon das #define für den Präprozessor da ist und keinerlei einwirkung hat auf das Fertige Compilat? |
Naja, in dieser Kombination mit #ifdef bewirkt es, dass nur ein Teil des Codes in die endgültige EXE eingeht, oder? Das ist ja der Sinn...
das mit dem KeyWord: Ich benutze selber M$, aber trotzdem: Ich finde, man sollte das rausnehmen... Außer dem M$-Ern dürfte das wohl kein Compiler fressen, is also net Standard, also raus damit...
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 03.04.2005, 01:12 Titel: |
|
|
Ähme, ich glaub Du hast nicht so ganz den Sinn von __forceinline und dem Gegenpart inline bzw. __inline vestanden Da sind Welten zwischen
Zum Keydown problem:
Wie sieht denn KeyDown aus?
ich seh da nur #define KeyDown und sonst keine Parameterangabe, keinerlei Rumpf usw.
wie z.B.: inline const bool keyPressed (unsigned int code)
{ return (g_KeyBuffer[Key] & 0x80); } _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.04.2005, 01:22 Titel: |
|
|
Ich werd wegen dem inline, __inline und __forceinline nachsehen... Danke für die Aufklärung.
Ich hab mal was gemacht:
CPP: | if(true)
{
if(Input->KeyDown(DIK_LEFT))
{Var1=Var2; TueWas();}
else if(Input->KeyDown(DIK_RIGHT))
{...}
//[...]
}
else
{
if(Input->KeyHit(DIK_LEFT))
{Var1=Var2; TueWas();}
else if(Input->KeyHit(DIK_RIGHT))
{...}
//[...]
} |
So geht es... Aber Gott weiß warum. Ich kann es so lassen, finde es von Stil her aber bescheuert (macht die EXE dicker)!!! Kann mir trotzdem jemand sagen, woran es liegt?
@Patrick: Willst du trotzdem den Funktionsrumpf haben?
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
KI JLI Master

Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 03.04.2005, 01:30 Titel: |
|
|
macht die exe aber nur minimal dicker.
zu den fehlern von oben. du hast irgendwo ein Semikolon oder eine Klammer vergessen. Check am besten alles nochmal genau durch. |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.04.2005, 01:31 Titel: |
|
|
KI hat Folgendes geschrieben: | zu den fehlern von oben. du hast irgendwo ein Semikolon oder eine Klammer vergessen. Check am besten alles nochmal genau durch. |
Obwohl es klappt, es auf er 1. Zeile meckert, und es mit der IF-Bedingung klappt???
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 03.04.2005, 10:44 Titel: |
|
|
also ich frag mich wirklich, welchen sinn die präprozessoren bei dir dort haben sollen.
Ist die funktion KeyHit überhaupt in Input deklariert? |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.04.2005, 12:44 Titel: |
|
|
Der Sinn ist: Ich bin mir noch net sicher, ob ich das mit KeyHit oder KeyDown realisieren will... Um das dann einfach schnell ändern zu können (ich muss mich da nioch mit jemandem absprechen...)
Ja, ich sach doch, es is alles definiert. Wenn ich das mit der normalen IF-Bedningung mache gehts...
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 03.04.2005, 12:52 Titel: |
|
|
Ich glaube das Problem ist das du KeyDown definierst.
Mach das mal so:
sowas:
CPP: | Input-> (DIK_LEFT)
// ^^^ ist ja leer weil du es weg definierst
|
kann ja nicht funktionieren _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.04.2005, 12:58 Titel: |
|
|
Danke PeaceKiller...
Wenn ich statt
CPP: | #define KeyDown
#ifdef KeyDown
//[...] |
diesem Code folgendes schreibe:
CPP: | #define KEY_DOWN
#ifdef KEY_DOWN
//[...] |
dann geht das ohne Probleme... Ich hab zwar net verstanden warum (Bitte um aufklärung...), aber trotzdem danke!!!
Danke und Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 03.04.2005, 13:09 Titel: |
|
|
ersetzt ja alle "KeyDown"s durch nichts
also sieht dein Code so aus, nachdem der Präprozessor ausgeführt wurde:
_________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 03.04.2005, 13:14 Titel: |
|
|
OOOOOOOHHHHHHHHHHH SHIT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
So ein Scheiß Fehler!!! Danke PeaceKiller!!! Ich bin SO DOOF!!!
Danke PeaceKiller, man sollte sich halt anständige Namen überlegen...
Danke für die Aufklärung und Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 03.04.2005, 13:17 Titel: |
|
|
Man sollte Makros generell in Großbuchstaben schreiben und Variablen/Instanzen klein/gemischt. |
|
Nach oben |
|
 |
|