Ich nehme mal als Beispiel eine Eltern und eine Kind Klasse. Die Eltern sollten natürlich wissen welches Kind nun ihres ist und das Kind sollte wissen welche Eltern seine Eltern sind. Kurz gesagt beide Klassen müssen voneinader wissen.
Wenn du versuchts das ganze per #include zu lösen so wie hier:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
// eltern.h
#include "kind.h"
class Eltern {...}
// kind.h
#include "eltern.h"
class Kind {...}
|
Wirst du einen Compiler Error erhalten weil die Auflösung von #include "kind.h" wieder "eltern.h" einbindet und du so eine endlos Schleife hast.
Um das ganze jetzt doch umsetzen zu können braucht man forward declaration, so könnte das ganze dann aussehen:
|
C-/C++-Quelltext
|
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
|
// eltern.h
class Kind
class Eltern
{
public:
Kind * GetKind()
{
return m_Kind;
}
private:
Kind * m_Kind;
}
// kind.h
class Eltern;
class Kind
{
public:
Eltern * GetEltern()
{
return m_Eltern;
}
private:
Eltern * m_Eltern;
}
|
Das ganze funktioniert weil der Compiler nicht wissen muss wie Kind deklariert ist um einen Zeiger auf eine Kind-Objekt speichern zu können.