Méthode template virtuelle
Bonjour
Comme indiqué dans le titre je cherche a faire des méthodes virtuelles utilisant des templates.
voici mon code actuel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
class Visiteur {
public:
Visiteur();
~Visiteur();
template <class Retour, class Param>
Retour visite(Classe * n, const Param & p)=0;
template <class Retour, class Param>
Retour visite(Ident * n, const Param & p)=0;
template <class Retour, class Param>
Retour visite(Decls * n, const Param & p)=0;
template <class Retour, class Param>
Retour visite(Main * n, const Param & p)=0;
};
class ControleDeType : public Visiteur{
private:
int nbErreurs;
int* tabErreurs;
public:
ControleDeType();
~ControleDeType();
template <class Retour, class Param>
Retour visite(Classe * n, const Param & p);
template <class Retour, class Param>
Retour visite(Ident * n, const Param & p);
template <class Retour, class Param>
Retour visite(Decls * n, const Param & p);
template <class Retour, class Param>
Retour visite(Main * n, const Param & p);
}; |
La compilation de ce code fonctionne mais lorsque je rajoute l'appel a une méthode le code ne compile plus.
Code:
1 2 3 4 5
|
Visiteur * c;
c = new ControleDeType();
Classe * classe = new Classe();
c->visite<int, int>(classe, 0); |
l'erreur est la suivante :
[Linker error] undefined reference to `int Visiteur::visite<int, int>(Classe*, int const&)'
Je ne sais pas très bien utiliser les templates, et je n'arrive pas a voir d'ou viens cette erreur.
Si quelqu'un pouvait me dépanner ce serait sympa.