Ich habe ein paar Klassen (A
, , C
) jeweils mit einem Mitglied mit einem Templat (Ptr<...>
) Typ je nach dem unvollständigen Typ einer anderen Klasse (rund). Ich würde gerne die Typen eingeben (::ptr
) wie unten gezeigt. Dies scheint nicht zu funktionieren - mein Compiler sagt mir folgendes:Typedefs in circular-abhängigen Klassen
In file included from B.hpp:6:0,
from A.hpp:6:
C.hpp:13:8: error: ‘ptr’ in ‘class A’ does not name a type
A::ptr a;
^
jedoch T*
statt T::ptr
macht es funktioniert. Wie kann ich das beheben?
A.hpp:
#ifndef TEST_INCLUDE_A
#define TEST_INCLUDE_A 1
class A;
#include "B.hpp"
#include "P.hpp"
class A {
public:
typedef Ptr<A> ptr;
B::ptr b;
};
#endif
B.hpp:
#ifndef TEST_INCLUDE_B
#define TEST_INCLUDE_B 1
class B;
#include "C.hpp"
#include "P.hpp"
class B {
public:
typedef Ptr<B> ptr;
C::ptr c;
};
#endif
C.hpp:
#ifndef TEST_INCLUDE_C
#define TEST_INCLUDE_C 1
class C;
#include "A.hpp"
#include "P.hpp"
class C {
public:
typedef Ptr<C> ptr;
A::ptr a;
};
#endif
P.hpp:
#ifndef TEST_INCLUDE_PTR
#define TEST_INCLUDE_PTR 1
template<class T>
class Ptr {
public:
T* ptr_t;
};
#endif