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
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, 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) :
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