peak | Bonjour à tous,
jai un problème dont je ne trouve pas de solution ;
Prenons un exemple :
Code :
- template <class TypeA, class TypeB, class TypeC>
- class Stock : public Index<TypeA, Item<Elem<TypeA, TypeB> > >{
- template<class Type>
- class Item {
- public:
- friend class Stock<TypeA, TypeB, TypeC>;
- Type E;
- Item<Elem<TypeA, TypeB> > * down;
- Item<Elem<TypeA, TypeB> > * up;
- Item(Type &T, Item<Elem<TypeA, TypeB> > * _down=NULL, Item<Elem<TypeA, TypeB> > * _up=NULL): E(T), down(_down), up(_up) { }
- Item(): E(), down(NULL), up(NULL) {}
- Type& Info(){ return E; }
- };
- bool var_membre ;
- public :
- bool fctMembre() ;
- } ;
|
Ceci ne compile évidement pas ; au moment de la déclaration de la class Stock, la class Item na pas encore été définie or celle-ci est utilisée pour etre passé en argument de template à la class (index) dont herite Stock.
( => « 'Item' : undeclared identifier »)
donc je déclare Item comme-ce ci en début de code :
Code :
- template <class TypeA, class TypeB, class TypeC>
- class Stock;
- template < class TypeA, class TypeB, class TypeC, class Type>
- class Stock<TypeA, TypeB, TypeC>::Item<Type>;
|
Mais mon compilo menvoit :
=> 'Item' : is not a member of 'Stock<TypeA, TypeB, TypeC>'
Et là je comprend pas ; peut être ai-je mal déclaré les classes mais me semble avoir un peu tout tester pour être sur que ce nétait pas une faute de syntaxe (le « template < class TypeA, class TypeB, class TypeC, class Type> » est un peu bizarre mais je sais pas comment faire autrement ? ) .
Donc voilà si quelquun à une super solution à me proposer, ça marrangerai bien.
Jespère avoir été claire.
Merci davance.
|