Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





El Template Misterioso

Iniciado por [HiDDeN], 31 de Enero de 2004, 12:32:33 PM

« anterior - próximo »

[HiDDeN]

 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?  :(  

Zaelsius

 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;
}
};

[HiDDeN]

 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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.