Bonjour à tous

Je souhaite créer des objets liés entre eux par des pointeurs : A <-> B <-> C
Sans template, pas de problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
// forward declaring
struct B; struct C; 
 
// declaring
struct A { B* b; }
struct B { A* a; C* c; }
struct C { B* b; }
Maintenant, même problème avec de templates :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
// declaring
template<typename B> struct A { B* b; }
template<typename A, typename C> struct B { A* a; C* c; }
template<typename B> struct C { B* b; }
 
// specialization
typedef A<B2> A2;          // B2 inconnu (error: ‘B2’ was not declared in this scope)
typedef B<A2, C2> B2;     // C2 inconnu
typedef C<B2> C2;
Forcement, ça pose problème au niveau compilation puisque B2 et C2 ne sont pas connu dans A2 et B2 respectivement. J'ai essayé d'ajouter avant la spécialisation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
template<typename T> struct B2;
template<typename T1, typename T2> struct C2;
 
typedef A<B2> A2; // (error: type/value mismatch at argument 1 in template parameter list for ‘template<typename B> struct A’
Un idée du comment faire ?

Merci