SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: recorcholis en Sábado 3 de Enero de 2009, 17:32

Título: Problemas con los templates
Publicado por: recorcholis en Sábado 3 de Enero de 2009, 17:32
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.
Título: Re: Problemas con los templates
Publicado por: m0skit0 en Lunes 5 de Enero de 2009, 09:28
¿Has puesto los include bien en tu CPP? Tu .h lo tienes que poner entre comillas y no entre <>.

Salud
Título: Re: Problemas con los templates
Publicado por: diego.martinez en Lunes 5 de Enero de 2009, 11:09
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.
Título: Re: Problemas con los templates
Publicado por: recorcholis en Lunes 5 de Enero de 2009, 12:57
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: