Voila j'ai une classe Objet qui à une classe fille Personnage qui a une classe fille Joueur qui a une classe fille Humain.

Mon but est de faire une classe fille de Humain mais en template.

Cette classe représente la classe (guerrier, archer, chevalier, etc.) de l'humain.

Alors est-ce possible ?

Car moi ça me met un message d'erreur.

Voici le code :

Guerrier.h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
class Humain;
 
template <class T>
class Guerrier : public T  
{
public:
	char* GetClasse(void);
	Guerrier(char* Nom);
	virtual ~Guerrier();
 
};
Guerrier.cpp

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
#include "Guerrier.h"
 
#include "InclusionRace.h"
 
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
template <class T>
Guerrier<T>::Guerrier(char* Nom) : T(Nom)
{
 
}
 
template <class T>
Guerrier<T>::~Guerrier()
{
 
}
 
template <class T>
char* Guerrier<T>::GetClasse()
{
	return "Archer\0";
}
Le message d'erreur est le suivant :

Eleckase.obj : error LNK2001: unresolved external symbol "public: __thiscall Guerrier<class Humain>::Guerrier<class Humain>(char *)" (??0?$Guerrier@VHumain@@@@QAE@PAD@Z)
Debug/Eleckase.exe : fatal error LNK1120: 1 unresolved externals


InclusionRace.h est un en-tête qui inclut toutes les races.
Et le constructeur de humain est :


Je veux utiliser un template car il y a 13 races et 19 classes et que je préfèrerais ne pas à avoir à les croiser toutes...