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; // ... };Puis dans le programme utilisant la DLL, je manipule mon singleton normalement :
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;
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part MaClasse::Instance().xxx();
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
Partager