Bonjour,
Je fais un template qui prend deux parametres, et dans une des méthodes je voudrais passer le premier paramètre a une méthode statique template du deuxieme paramètre. ca donne cela :
Le problème se situe a niveau de la ligne A *p = B::getMachin<A>(ref)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 template <typename A, typename B> class Foo { public: int methode(const B& ref) { A *p = B::getMachin<A>(ref); if (!p) return -1; return p->getInt(); } };
Le compilo (vc2005) me sort :
Je ne comprend pas pourquoi il n'aime pas, la methode statique getMachin renvoie bien évidement un pointeur sur le type qu'on lui passe en paramètre template.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Foo.hpp(35) : error C2275: 'A' : illegal use of this type as an expression 1> TypeA.h(63) : see declaration of 'TypeA' 1> Template.hpp(34) : while compiling class template member function 'int Foo<A,B>::methode(const B &)' 1> with 1> [ 1> A=TypeA, 1> B=TypeB 1> ] 1> TypeA.h(63) : see reference to class template instantiation 'Foo<A,B>' being compiled 1> with 1> [ 1> A=TypeA, 1> B=TypeB 1> ]
edit : Je precise que la class A (TypeA) hérite de Foo.
Quelqu'un voit comment résoudre l'erreur ?
Partager