Klasse1.hpp
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#pragma once
class Klasse2;
class Klasse1
{
private:
Klasse2* pKlasse1;
public:
// ...
};
|
Klasse2
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#pragma once
class Klasse1;
class Klasse2
{
private:
Klasse1* pKlasse1;
public:
// ...
};
|
Das wären also die deklarationen nu weiter mit der Definition.
Klasse1.cpp
|
C-/C++-Quelltext
|
1
2
3
4
|
#include "Klasse1.hpp"
#include "Klasse2.hpp"
// ...
|
Klasse2.cpp
|
C-/C++-Quelltext
|
1
2
3
4
|
#include "Klasse2.hpp"
#include "Klasse1.hpp"
// ...
|
Wie bereits gesagt spricht man hierbei von Forwarddeclarations. Du musst halt immer schön Objekte im Freestore anlegen auf die gezeigt werden kann
und dich um die freigabe derer kümmern.
Alternativ kannst du aber auch einfach Smartpointer verwenden, z.B. std::auto_ptr.
Das ganze klappt weil der Compiler wärend des Compiliervorgangs noch nicht die Definition der Objektklasse kennen müssen, falls es sich um einen Zeiger handelt. Bei Objekten auf dem Stack sieht das anders aus, die müssen initialisiert werden. Darum muss die Größe bekannt sein (vorherige Definition is notwendig).
grüße