Mehrere voneinander abhängige Klassen

Hi www’ler,

ich habe ein Problem mit mehreren Klassen, die sich gegenseitig benötigen.
Ich habe die Klassen:

//in Position.h
#ifndef __POSITION__
#define __POSITION__

class Position {
private:
int x,y;
public:
//…//
vector Neighbours();

friend class Plane; //weil Plane in einer Methode auf x und y zugreifen muss
};

#endif


//in Plane.h
#ifndef __PLANE__
#define __PLANE__

class Plane {
private:
Position current_pos;
public:
//…//
//verschiedene Methoden, die die Klasse Position benötigen
};

#endif


//in HashTable.h
#ifndef __HASHTABLE__
#define __HASHTABLE__

typedef Plane *OPTR;
typedef Position Key_Type;
//…//
class HashTable {
private:
vector HTab;
const int HT_Size;
public:
//…//
};

#endif


//in der .cpp
#include „Position.h“
#include „HashTable.h“
#include „Plane.h“

int main(){
//…//
}

Im Plane-Header include ich Position.h und im HashTable-Header include ich Plane.h und Position.h wegen dem typedef und in meiner .cpp hole ich mir alle drei Header-Dateien rein.
So, bis jetzt kompiliert auch alles wunderbar.

Allerdings muss ich jetzt als Erweiterung unserer Aufgabe die Methode Position::Neighbours ändern, sodass dort ein Parameter const HashTable& HT übergeben wird und der Rückgabevektor nicht Position’s enthält sondern Zeiger auf Planes. Quasi:
vector Neighbours(const HashTable& HT);

Wenn ich jetzt also im Position-Header HashTable.h und Plane.h include, dann bekomme ich zunächst mal 19 Fehlermeldungen IN PLANE.H, dass angeblich „Position does not name a type“. Diese Fehlermeldung ist für mich schonmal total undurchsichtig, da ich ja die Klasse Position in Plane.h included habe und sie somit bekannt sein sollte (hat ja vorher auch geklappt…)

So…FALLS ich in der .cpp Position.h NICHT include, DANN bekomme ich nur noch 11 Fehlermeldungen IN POSITION.H und zwar im Kopf der Methode Neighbours. Er sagt mir jetzt „Expected ‚,‘ or ‚…‘ before ‚&‘ token“ und „ISO C++ forbids declaration of ‚HashTable‘ with no type“
Außerdem meckert er, wenn ich sage:

#include „HashTable.h“
#include „Plane.h“
typedef Plane *OPTR //

Eventuell war es doch keine so tolle Idee von mir die einzelnen Klassen in 3 verschiedene Header zu packen…

Ich hoffe ich habe einigermaßen verständlich rübergebracht was mein Problem ist.

Einen weihnachtlichen Gruß und schonmal Danke für die Mühe

Sven

Hallo Sven,

versuche es mal mit Forward-Declarationen:

//in der .cpp
class Position;
class HashTable;
class Plane;

#include „Position.h“
#include „HashTable.h“
#include „Plane.h“

int main(){
//…//
}

Hast Du deinen Code in Position.cpp, HashTable.cpp und Plane.cpp ausgelagert?

Grüße
Thorsten