#ifndef A_H_ #define A_H_ class A { public: A(); virtual ~A(); }; #endif /*A_H_*/ #ifndef B_H_ #define B_H_ #include "A.h" #include "C.h" class B : public A { public: B(); virtual ~B(); void foo(); private: C* c; }; #endif /*B_H_*/ #ifndef C_H_ #define C_H_ #include "A.h" class B; class C { public: C(A *a); virtual ~C(); private: B *b; }; #endif /*C_H_*/ ************** SOURCE FILES ******************* #include "A.h" A::A() { } A::~A() { } #include "B.h" B::B() { } B::~B() { } void B::foo() { } #include "C.h" C::C(A *a) { this->b = reinterpret_cast(a); } C::~C() { b->foo(); }