steckl: C++-Klassen: Beidseitig gerichtete Assoziation

Beitrag lesen

Hi,

ich versuche 2 Klassen zu Programmieren, die gegenseitig Elemente der anderen (oder Referenzen auf die andere) beinhalten können sollen.

Das brauche ich später für die Programmierung eines Pokerspiels, bei dem die Klasse Spiel mehrere Spieler als Attribute enthält, aber die Spieler auch eine Referenz auf das Spiel enthalten sollen, damit sie z.B. sehen können, welche Karten auf dem Tisch liegen.

Ich hab das Ganze mal vereinfacht:

fileA.h:

  
#ifndef CLASS_A_H  
#define CLASS_A_H CLASS_A_H  
  
#include <iostream>  
#include "fileB.h"  
  
using namespace std;  
  
class classA {  
public:  
  classB ab;  
  
  classA(void)  
  {  
   cout << "Konstruktor von A" << endl;  
  }  
};  
  
#endif  

fileB.h:

  
#ifndef CLASS_B_H  
#define CLASS_B_H CLASS_B_H  
  
#include <iostream>  
#include "fileA.h"  
  
using namespace std;  
  
class classB {  
public:  
  classA ba;  
  
  classB(void)  
  {  
   cout << "Konstruktor von B" << endl;  
  }  
};  
  
#endif  

Wenn ich das in einer main-Funktion einbinde und compilieren will kommt folgende Fehlermeldung:
In file included from fileA.h:5,
                 from fileA.cpp:4:
fileB.h:12: Fehler: »classA« bezeichnet keinen Typ

Wenn ich in einer der beiden Dateien das Include der anderen und das Attribut der anderen Klasse weglasse klappt alles.
Wenn ich aus den Attributen Pointer mache (also classA *ba) klappt es ebenfalls nicht.

Gibt es dafür einen Trick? Sowas wie "extern class classA" oder so ähnlich?

Oder geht das grundsätzlich nicht? Was mich aber wundern würde, weil es in der UML ja auch beidseitig gerichtete Assotiationen gibt. Nur finde ich keinen C++ Code dazu.

mfG,
steckl