Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Dafür gibt es so genannte Vorwärtsdeklarationen - du kannst in einer Header-Datei sagen, dass es eine bestimmte Klasse gibt, ohne deren Header zu includen, und diese Klasse dann schon benutzen, solange du sie nur als Pointer benutzt (Pointer sind immer gleich groß, deshalb muss der Compiler den Typ nicht genau kennen, solange du nicht auf Memberfunktionen etc zugreifst).In Framework include ich Game.h und in Game.h ist nicht Framework.h included... geht auch nicht. Jetzt kann ich keinen Pointer cFramework* Framework mehr erstellen um in Game die Instanz zu speichern, weil es schlicht und ergreifend nicht definiert ist.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
class Game; class Framework { private: Game* game; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
class Framework; class Game{ private: Frame* framework; }; |
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Stimmt auch. Ich bin quasi bei 0. Es ist doch schwerer als ich gedacht habe.Zitat
vielleicht ist dein Problem, dass du nicht wirklich weißt, welche Beziehungen zwischen den Klassen tatsächlich notwendig sind
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// cContainer.h #ifndef CONTAINER #define CONTAINER #include "KlasseA.h" #include "KlasseB.h" class cContainer { public: cKlasseA KlasseA; cKlasseB KlasseB; void Init(); }; void cContainer::Init() { KlasseB.Init(this); // Hier wird die Instanz an cKlasseB übergeben } #endif |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//cKlasseB.h #ifndef KLASSEB #define KLASSEB class cContainer; // Vorwärtsdeklaration class cKlasseB { private: cContainer* Container; public: cKlasseB(); ~cKlasseB(); void Init(cContainer* p_cContainer); }; cKlasseB::cKlasseB() { Container = NULL; } cKlasseB::~cKlasseB() { Container = NULL; } void cKlasseB::Init(cContainer* p_cContainer) { Container = p_cContainer; int Zahl = Container->KlasseA.Zahl; // Hier will ich mir eine Zahl aus cKlasseA holen... ich will auch Memberfunktionen von cKlasseA nutzen können } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Clark« (19.01.2012, 03:03)
Werbeanzeige