Bonjour
Comme indiqué dans le titre je cherche a faire des méthodes virtuelles utilisant des templates.
voici mon code actuel

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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.