Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: [HiDDeN] en 31 de Enero de 2004, 12:32:33 PM

Título: El Template Misterioso
Publicado por: [HiDDeN] en 31 de Enero de 2004, 12:32:33 PM
 Tengo un template que me ta volviendo loco  (nooo)


Amo a ver... tengo este método:

cBackgrounds::~cBackgrounds()
{
   // Close all textures and sprites
   cReleaser* c_releaser = new cReleaser();
   c_releaser->safeRelease(m_pTexBackground);
   c_releaser->safeRelease(m_pSprite);
   delete c_releaser;
}

Y el método safeRelease con su correspondiente Template es este:

template
inline void cReleaser::safeRelease(T& iface)
{
   if(iface)
   {
      iface->Release();
      iface = NULL;
   }
}


Hay un par de errores del linker (porque hay 2 llamadas). Por ejemplo, el primer error dice:

Core error LNK2019: símbolo externo "public: void __thiscall cReleaser::safeRelease(struct ID3DXSprite * &)" (?safeRelease@cReleaser@@QAEXAAPAUID3DXSprite@@@Z) sin resolver al que se hace referencia en la función "public: __thiscall cBackgrounds::~cBackgrounds(void)" (??1cBackgrounds@@QAE@XZ)


No lo entiendo... está todo bien definido, los includes están bien.
Si el template lo pongo en la misma clase (cBackgrounds), no hay ningún problema de link...

¿Alguien sabría desvelar el misterio?  :(  
Título: El Template Misterioso
Publicado por: Zaelsius en 31 de Enero de 2004, 01:06:42 PM
 Quizá adivinar por qué falla sin ver el resto de ficheros es difícil... por cierto, ¿por qué no te basta usar una plantilla genérica, que no pertenezca a una clase concreta?

Algo como:


template <class T>
inline void SafeRelease( T& iface )
{

if(iface)
{
  iface->Release();
  iface = NULL;
}
};
Título: El Template Misterioso
Publicado por: [HiDDeN] en 31 de Enero de 2004, 01:56:23 PM
 Weno ya ta solucionado, entré al canal de IRC y Colson me tuvo ayudando.

Se ha de implementar el template en el mismo header, siempre y cuando se le llame desde otro fichero. Si se le llama desde el mismo, puede implementarse en el cpp de la clase que lo contiene.

Respecto a por qué usar una clase que lo contenga... weno, gustos... a mí me gusta más  :D

Asias x la ayuda.