SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: diego.martinez en Miércoles 14 de Noviembre de 2007, 01:00

Título: Singleton
Publicado por: diego.martinez en Miércoles 14 de Noviembre de 2007, 01:00
buenas:

estoy intentando hacer un patron singleton pero me esta dando un fallo que no entiendo:


este es el singleton
Código: Text
  1.  
  2. //---------------------------- H
  3.  
  4. class KngEngine
  5. {
  6. protected:
  7. static  KngEngine *  Instance;
  8.     KngEngine();
  9.  
  10. public:
  11. static  KngEngine *  Get();    //singleton
  12.  
  13. };
  14.  
  15. //---------------------------- C
  16.  
  17. KngEngine * KngEngine::Get()
  18. {
  19.   if (KngEngine::Instance==NULL)
  20.     KngEngine::Instance=new KngEngine();
  21.  
  22.   return KngEngine::Instance;
  23. }
  24.  
  25. KngEngine::KngEngine()
  26. {
  27.  
  28. }
  29.  
  30.  
cuando compilo me dice:

KngEngine.obj : error LNK2001: unresolved external symbol "protected: static class KngEngine * KngEngine::Instance" (?Instance@KngEngine@@1PAV1@A)
Debug/KngEngine.exe : fatal error LNK1120: 1 unresolved externals

sin embargo es solo un miembro de la clase, deberia estar correctamente definida. No entiendo en que consiste el fallo, y lo peor es que buscando por google parece que lo he implementado bien, alguien ve que puede estar mal?

gracias por anticipado
Título: Re: Singleton
Publicado por: Eternal Idol en Miércoles 14 de Noviembre de 2007, 11:00
Es un error de enlazado, static significa que el miembro no pertence a ninguna instancia en particular y por lo tanto tenes que instanciarlo, viendo tu codigo deberias hacerlo asi:

Código: Text
  1.  
  2. KngEngine *KngEngine::Instance = 0;
  3.  
  4.  
Título: Re: Singleton
Publicado por: diego.martinez en Miércoles 14 de Noviembre de 2007, 16:20
pues si, perfecto, era ese el fallo

muchas gracias.  :lol: