Bonjour

J'ai créé dans une DLL une classe singleton, exportée via la directive __declspec(dllexport). J'utilise pour créer mes singletons une classe de base template comme ceci :

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
template <class T>
class CSingleton
{
public :
 
    static T& Instance();
 
    // ...
 
private :
 
    static T* Inst;
 
    // ...
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
class EXPORT MaClasse : public CSingleton<MaClasse>
{
    friend class CSingleton<MaClasse>;
 
    // ...
};
 
// Puis dans MaClasse.cpp :
template <> MaClasse* CSingleton<MaClasse>::Inst = NULL;
Puis dans le programme utilisant la DLL, je manipule mon singleton normalement :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
MaClasse::Instance().xxx();
Ce code compile parfaitement sous Visual C++ 7.1, mais Dev-C++ 4.9.9.1 (gcc 3.3.1) me donne lui une erreur d'édition de lien en compilant le client de la DLL : il ne trouve pas MaClasse::Inst (qui est pourtant défini dans un .cpp et exporté comme toute sa classe). La DLL compile elle parfaitement avec les deux compilos.

Est-ce que j'ai loupé quelque chose, fait une fausse manip (notamment avec le template singleton) ou bien est-ce un comportement maladroit de Dev-C++ ?

Merci