klassen sollen sich gegenseitig benutzen.
-
guten tag, folgende 2 klassen:
class HeadQuater
{
public:Auto *A;
void run();
};#include "HeadQuater"
class Auto
{
public:HeadQuater *Hq;
void wähle();
};in der funktion wähle() benutze ich die funktion von HeadQuater wie folgt:
Hq->run();
das funktioniert auch ohne probleme.in HeadQuater möchte ich jetzt gerne wähle() der klasse Auto benutzen. Also includiere ich #include "Auto" in der .h datei von HeadQuater. laut compiler schließen sich die klassen jetzt selbst ein. also der Aufruf A->wähle(); in der .cpp datei von HeadQuater funktioniert nicht.
Das die Klassen nur einmal aufgerufen werden kann man laut internet hiermit:#ifndef MYHEADERNAME_H
#define MYHEADERNAME_H//Hier das was in die Headerdatei kommt
#endif
umgehen. leider funktioniert das nicht.
Also wie schaffe ich es, dass ich die methoden beider klassen in beiden klassen verwenden kann? danke euch

-
Mit einer Vorwärtsdeklaration.
Du deklarierst die Klassen in den Headern, anstatt ihre Header einzubinden.
Also anstatt in dem Header von HeadQuarter den Header von Auto einzubinden, schreibst duclass Auto;Dann kannst du in den Sources, die beide Header problemlos einbinden können, beide Klassen benutzen.
Beispiel:
// A.h struct B; // struct B wird deklariert. struct A { B* b; // Ein opaker Zeiger, da der Typ hier nicht gebraucht wird kann er unvollständig sein A(); }; // B.h struct A; struct B { A* a; B(); }; // A.cc #include "A.h" #include "B.h" A::A(): b( new B() ) // für den new-Operator muss der Typ (hier B) vollständig sein. Das ist allerdings durch das Einbinden des Headers kein Problem. {} // B.cc #include "A.h" #include "B.h" B::B(): a( new A() ) {}~Keine Garantie - bin besoffen. SeppJ kontrolliert das.~

-
...
-
Solche zirkulären Abhängigkeiten deuten idR auf Designfehler hin, insbesondere bei Anfängern. Bist du sicher, dass du die Abhängigkeiten so benötigst?