JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

#ifdef/#define-Problem
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 00:59    Titel: #ifdef/#define-Problem Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 01:04    Titel: Antworten mit Zitat

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? Wink Überleg mal wer VC++ hergestellt hat Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 01:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 01:12    Titel: Antworten mit Zitat

Ähme, ich glaub Du hast nicht so ganz den Sinn von __forceinline und dem Gegenpart inline bzw. __inline vestanden Wink Da sind Welten zwischen Wink

Zum Keydown problem:
Wie sieht denn KeyDown aus?

ich seh da nur #define KeyDown und sonst keine Parameterangabe, keinerlei Rumpf usw. Wink

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 01:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 01:26    Titel: Antworten mit Zitat

hmn *kopfkratz*

Grad keine Ahnung, naja ist ja auch spät... ääh früh Rolling Eyes
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 01:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 01:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 10:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 12:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 12:52    Titel: Antworten mit Zitat

Ich glaube das Problem ist das du KeyDown definierst.
Mach das mal so:
CPP:
#define KEY_DOWN


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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 12:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 13:09    Titel: Antworten mit Zitat

CPP:
#define KeyDown

ersetzt ja alle "KeyDown"s durch nichts

also sieht dein Code so aus, nachdem der Präprozessor ausgeführt wurde:

CPP:
Input->(DIK_LEFT)

_________________
»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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 13:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 03.04.2005, 13:17    Titel: Antworten mit Zitat

Man sollte Makros generell in Großbuchstaben schreiben und Variablen/Instanzen klein/gemischt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum