[VC++6.0] Pb de déclaration d'une variable de type template singleton
Bonjour à toutes et à tous !
J'ai récupéré le code source d'une application que je dois optimiser. Il y a quelques variables globales dans cette application et je souhaite mettre à profit le Design Pattern Singleton.
J'ai récupéré un code source définissant une classe template singleton (.h suivant) :
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 41 42 43 44
|
#ifndef _SINGLETON_H
#define _SINGLETON_H
template <class T>
class CSingleton
{
public:
// Renvoi l'instance unique de la classe
static CSingleton* Instance()
{
if( !pInst )
pInst = new T;
return pInst;
}
// Détruit l'instance unique de la classe
static void Destroy()
{
delete pInst;
pInst = NULL;
}
protected:
// Constructeur par défaut
CSingleton();
// Destructeur par défaut
~CSingleton();
private:
// Donnée membre
static T* pInst;
// Copie interdite
CSingleton(const CSingleton&);
void operator=(const CSingleton&);
};
// Déclaration de notre variable statique
template <class T> T* CSingleton<T>::pInst = NULL;
#endif |
Jusque la pas de problème :), pas de problème de compilation.
Etape suivante, je souhaite créer mes propres classes dérivant de cette classe template ... hop c'est parti en faisant comme ci après (j'ai juste utilisé un .h) :
Code:
1 2 3 4 5 6 7 8 9 10
|
#ifndef _UN_SINGLETON_H
#define _UN_SINGLETON_H
class CUnSingleton : public CSingleton<CUnSingleton>
{
friend class CSingleton<CUnSingleton>;
};
#endif |
Là encore je compile et aucune erreur :)
Mon problème est le suivant : comment déclarer dans mon main une variable de type CUnSingleton ? Quand je fais :
Code:
1 2
|
CSingleton<CUnSingleton>* S = CSingleton<CUnSingleton>::Instance(); |
ça passe pas et j'ai le message d'erreur suivant :
Code:
1 2
|
TEMPLATE_SINGLETON.obj : error LNK2001: unresolved external symbol "protected: __thiscall CSingleton<class CUnSingleton>::CSingleton<class CUnSingleton>(void)" (??0?$CSingleton@VCUnSingleton@@@@IAE@XZ) |
Est ce que quelqu'un a une idée à me proposer pour résoudre mon problème ?
D'avance merci.