salut,
je cherche à définir une classe CConsole, héritée d'une classe template CSingleton, et utilisée alors dans une classe CTest mais j'obtiens une erreur au linkage :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
test.obj : error LNK2001: unresolved external symbol "private: __thiscall CConsole::CConsole(void)"
voici le code du fichier console.h :

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
#ifndef CONSOLE_H
#define CONSOLE_H
 
#include "singleton.h"
 
class CConsole : public CSingleton<CConsole> {
friend class CSingleton<CConsole>;
 
public:
 
protected:
 
private:
   CConsole(void);
   ~CConsole(void);
};
 
#endif
le code de singleton.h :

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
#ifndef SINGLETON_H
#define SINGLETON_H
 
template <class T>
class CSingleton {
public:
   static T *get(void);
 
protected:
 
private:
   CSingleton(void);
   ~CSingleton(void);
 
   static T *m_pInst;
};
 
template <class T> T *CSingleton<T>::m_pInst=NULL;
 
template <class T>
T *CSingleton<T>::get(void) {
   if(m_pInst == NULL) {
      m_pInst=new T();
   }
 
   return m_pInst;
}
 
#endif
et le code pour tester :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
#include "console.h"
[...]
CConsole *pConsole=CConsole::get();
j'ai trouvé que ça marchait si :
- je ne fais pas d'objet CConsole dans CTest, mais bon y a aucun intérêt puisque c'est mon objectif,
- et si je commente la ligne "CSingleton(void);" dans singleton.h
je ne comprends pas pourquoi et ça ne me semble pas être correct donc je viens ici vous demander de l'aide.
je précise que le test est effectué dans un projet de dll, si ça a son importance dans cette erreur.
par avance, merci