error LNK2001 avec singleton
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:
test.obj : error LNK2001: unresolved external symbol "private: __thiscall CConsole::CConsole(void)"
voici le code du fichier console.h :
Code:
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:
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:
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