Nein, es funktioniert auch sonst nicht.
Das Problem einer zyklischen Abhänigkeit ist, dass Header A eine Deklaration benötigt die sich in Header B befindet. Header B benötigt eine Deklaration die sich in Header A befindet. Dieser Endloskreislauf kann zwar mit einem Include-Guards oder "
#pragma once" gebrochen werden, jedoch wird einer der Beiden Header einen Fehler verursachen, weil eine Deklaration erfordert, die sich im anderen befindet der noch nicht includiert wurde. Das ist der Fall, weil dieser andere Header bereits übergeordnet eingebunden wurde, die Deklarationen jedoch noch nicht verarbeitet wurden, weil vorher wiederum der andere Header eingebunden wurde.
Es ist nicht möglich diesem Code mit der zyklischen Abhänigkeit zu kompilieren, obwohl in dem Fall "
#pragma once" verwendet wird:
HeaderA.h:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
#pragma once
#include "HeaderB.h"
IntTypeB DoSomething();
typedef int IntTypeA;
|
HeaderB.h:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
#pragma once
#include "HeaderA.h"
IntTypeA DoSomething();
typedef int IntTypeB;
|
Die Lösung ist schlicht und in dem Fall das Verschieben der Typedefs in einen anderen Header oder normalerweise Forward Declaration.