Logo

¡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.
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.