Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.04.2004, 19:48 Titel: Komunikation zwischen Klassen |
|
|
Ich habe eine Klasse CSpieler und eine Klasse CLevel.
Damit sie miteinaneder Komuzieren können besitzen sie jeweils einen Zeiger auf das Objekt der andern Klaase.
Ich hab also ein Level und ein Spieler Objekt. Das Level objekte hat einen Zeiger auf das Spieler Objekte, da es für das Laden der Leveldatei verantwortlich ist und die Mehtode des Spielerobjekte SetPosition() mit der Positionsangabe aus der leveldatei aufrufen soll.
Das Spielerobjekt hat einen Zeiger auf das Levelobjekt, damit es dessen Methode zur Kollisionsabfrage aufrufen kann.
Nun das ganze schön in Dateien aufgeteitl:
Spieler.h
Spieler.cpp
Level.h
Level.cpp
Ich hab schon gelesen, das man in einem solchen fall in die Level.h nicht die Spieler.h includieren darf, sondern eine Vorwärtsdeklaration (hieß glaub ich so) der Klaase schreiben muss:
statt:
Code: |
#include "Spieler.h" |
Das mit dem Include führte zu ziemlich vielen fehlern, mit der Vorwärtsdeklaration gehts es fast:
In der Ladenfunktion des Levels erzeugt folgende Zeile folgenden Fehler:
Code: | m_pSpieler->SetPosition(nSpielerXPos, nSpielerYPos);
|
Code: | :\C++\BirthdayQuest\Level.cpp(31) : error C2027: Verwendung des undefinierten Typs "CSpieler"
F:\C++\BirthdayQuest\Level.h(7) : Siehe Deklaration von 'CSpieler'
F:\C++\BirthdayQuest\Level.cpp(31) : error C2227: Der linke Teil von '->SetPosition' muss auf Klasse/Struktur/Union zeigen
Fehler beim Ausführen von cl.exe. |
Was muss ich den jetzt machen um die Funktion aufrugen zu können? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.04.2004, 19:57 Titel: |
|
|
Bei Forward-Deklarationen muss du dann den Header aber schon in der C++ Datei includen, hast du das? Ansonsten darfst keine Fkt. im Header definieren, die auf ein Objekt des Typs verwenden.
C. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.04.2004, 20:34 Titel: |
|
|
Wow, nachdem ich erst kein Wort kapier hab, funktionierts jetzt:
Man muss einfach in der Spieler.h die Forward-Deklaration class CLevel; schreiebn und in die Spieler.cpp die Datei "Level.h" includieren.
Wie soll ma da denn von alleine draufkommen???
Nja, ich weiß es jetz und jeder der das hier liest auch, und das reicht. Danke.
Achja, noch 2 klitzekleine Fragen, jetzt wo alles so schön funktioniert:
Wie bekommen ich diese Beiden Meldungen weg?
1:
F:\VisualStudio\DX9SDK\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
(Die kommt beim Kompilieren ungefähr 7 mal.
2:
Code: |
bool CDirectInput::MouseButtonDown(int Nummer)
{
return (bool)m_Mousestate.rgbButtons[Nummer];
}
|
F:\C++\BirthdayQuest\CDirectInput.cpp(189) : warning C4800: 'unsigned char' : Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten moeglich)
Ist eigentlich nicht wichtig, stört aber wenns immer kommt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.04.2004, 20:42 Titel: |
|
|
1) Indem du vor dem includieren des Dinput.h Headers #define DIRECTINPUT_VERSION 0x0800 schreibst.
2) Code: |
BOOL CDirectInput::MouseButtonDown(int Nummer)
{
return m_Mousestate.rgbButtons[Nummer];
}
|
C. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 05.04.2004, 20:57 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | F:\VisualStudio\DX9SDK\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 |
Was hat denn das eigentlich zu bedeuten?
Ich bekomme diese Warnung auch jedesmal (AFAIK, seitdem ich DX9 drauf hab). _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.04.2004, 21:01 Titel: |
|
|
Wahrscheinlich das er bei DirectX9 keine aktuelle Version von DierctInput findet. Steht ja auch im Buch, das daran nichts geändert wurde. Und darum sagt er halt, das er auf eine veralterte Version zurückgreift. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.04.2004, 21:02 Titel: |
|
|
Naja, da man verschiedene DInput Versionen verwenden kann, sagt man DX welche man haben will, mit Hilfe des Define. Wenn du nichts angibt, wird Version 8 (die momentan aktuelle DInput-Version) angenommen...Kann man am besten verstehen, wenn man mal in den DInput Header reinschaut.
C. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.04.2004, 21:05 Titel: |
|
|
Das scheint eine interne Versionsunterscheidung vorzuliegen aufgrund der Abwärtskompatiblität. Aber warum die den define rausgenommen haben versteh ich auch nicht. Vermutlich wollen sie den Codern die wahl der Version überlassen, vieleicht auch falls man selbst was am DI verändert haben sollte. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
|