• Viernes 15 de Noviembre de 2024, 04:58

Autor Tema:  Problemas con los templates  (Leído 1102 veces)

recorcholis

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Problemas con los templates
« en: Sábado 3 de Enero de 2009, 17:32 »
0
Hola:
Estoy intentando crear un árbol genérico pero me he topado con un problema, a ver si me pueden echar una mano.
El caso es el siguiente.
Tengo el .h declarado de la siguiente manera:
template<class T>
class ARBOL
{
public:
...
   bool Insertar(T x);
...
};

El .cpp lo tengo de este modo:
template<class T>
bool ARBOL<T>::Insertar(T x)
{
...
}

Y en el main lo llamo así:
void main()
{
   ARBOL<int> Arbol;
   Arbol.Insertar(70);
...

Y con VisualStudio me salta un error de LNK2028 diciendo que no encuentra la función ARBOL<int>::Insertar(int)

Creo que está todo correcto... pero claramente no es así.
Espero que me puedan ayudar.
Muchas gracias de antemano.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con los templates
« Respuesta #1 en: Lunes 5 de Enero de 2009, 09:28 »
0
¿Has puesto los include bien en tu CPP? Tu .h lo tienes que poner entre comillas y no entre <>.

Salud

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Problemas con los templates
« Respuesta #2 en: Lunes 5 de Enero de 2009, 11:09 »
0
veamos, corregidme si me equivoco, pero creo que el problema radica en que en el caso de los templates, el linkador desconoce como debe linkar la operacion en caso de ser int.

Mientras el .h usa T como typo, en algun C debes definir como <int> y decirle que debe hacer.

O sea, si lo haces en el .h se compila bien por que se hace el cambio en el propio compilado, sin embargo, el linkador no sabe de que le hablas, asi que debes definir un modulo con la template bien definida , o sea:
Código: Text
  1.  
  2. bool ARBOL<int>::Insertar(int x)
  3. {
  4. ...
  5. }
  6.  
  7. bool ARBOL<float>::Insertar(float x)
  8. {
  9. ...
  10. }
  11.  
  12.  

este problema lo encontre yo al usarlas para el compilador IAR. Para otras cosas uso simples .h por que suelen ser operaciones simples. Pero si tienes que usar un modulo .cpp tienes que indicar todos los tipos posibles en los que el linkador se puede encontrar el tema.

suerte.

recorcholis

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Problemas con los templates
« Respuesta #3 en: Lunes 5 de Enero de 2009, 12:57 »
0
Gracias por responder.
Tiene pinta de ser lo que dice Diego. Esta noche lo pruebo.
Me sigue mosqueando que no se pueda poner un template así como parámetro, pero bueno, con esto espero poder solucionarlo.
Muchas gracias compañeros!
 :beer: