JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=ada4b4784e2f7b87d47a9761e2e62579Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Komunikation zwischen Klassen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 05.04.2004, 19:48    Titel: Komunikation zwischen Klassen Antworten mit Zitat

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"

Code:
class Spieler;


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 05.04.2004, 19:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 05.04.2004, 20:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 05.04.2004, 20:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.04.2004, 20:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 05.04.2004, 21:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 05.04.2004, 21:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.04.2004, 21:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
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