Bonjour,
Je souhaite créer une classe modèle. A l'école on m'a appris cette méthode. On déclarer un pointeur static dans la classe et on crée une fonction static Mdl() qui renvoie ce pointeur. Cela permet de n'avoir qu'à instancier une seule fois la classe pour pouvoir l'utiliser dans tout le code. Très pratique !
Mais voilà le problème, j'ai fait ces solutions sur Java et C# et en C++ je suis confronté à un petit problème.
Voilà ma classe.hpp :
Et une partie du .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Controler { private: static Controler* mdl; ... static Controler* Mdl(void); };
Voilà le problème. J'ai appris qu'une variable static devait toujours être obligatoirement initialisée sinon le linker hurle.
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 #include "Controler.hpp" using namespace std; using namespace sf; //Controler::mdl = NULL; Controler::Controler() { mdl = this; } Controler* Controler::Mdl() { return mdl; }
Si je commente Controler::mdl = NULL; le linker hurle effectivement ceci :
Si au contraire je décommente il me hurle ceci :Erreur 2 fatal error LNK1120: 1 externes non résolus C:\Users\Tbop\Documents\Visual Studio 2008\Projects\GameEngine\Debug\GameEngine.exe
Erreur 1 error LNK2001: symbole externe non résolu "private: static class Controler * Controler::mdl" (?mdl@Controler@@0PAV1@A) Controler.obj
Je tourne en rond et je ne sais vraiment plus quoi faire !Erreur 1 error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut c:\users\tbop\documents\visual studio 2008\projects\gameengine\gameengine\controler.cpp 6
Erreur 2 error C2040: 'mdl'*: les niveaux d'indirection de 'int' et de 'Controler *' sont différents c:\users\tbop\documents\visual studio 2008\projects\gameengine\gameengine\controler.cpp 6
Merci de votre aide
Partager