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) :
Jusque la pas de problème , pas de problème de compilation.
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
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
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) :
Là encore je compile et aucune erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Mon problème est le suivant : comment déclarer dans mon main une variable de type CUnSingleton ? Quand je fais :
ça passe pas et j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CSingleton<CUnSingleton>* S = CSingleton<CUnSingleton>::Instance();
Est ce que quelqu'un a une idée à me proposer pour résoudre mon problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TEMPLATE_SINGLETON.obj : error LNK2001: unresolved external symbol "protected: __thiscall CSingleton<class CUnSingleton>::CSingleton<class CUnSingleton>(void)" (??0?$CSingleton@VCUnSingleton@@@@IAE@XZ)
D'avance merci.
Partager