[C con Clase] Plantillas

Steven Davidson steven en conclase.net
Vie Jul 6 03:50:56 CEST 2007


Hola Alan,

El pasado 2007-07-06 01:44:07, alan escribió:

a> Hola espero puedan ayudarme.
a> Tengo una plantilla de clase "Nodo" el cual la declaro en un archivo de cabecera (lista.h) y la defino en un archivo fuente (lista.cpp), luego creo un objeto de esta clase en otro archivo fuente(main.cpp) donde esta main() pero al la hora de compilar me da "error LNK2001: unresolved external symbol "public: __thiscall Nodo<float>::Nodo<float>(void)" (??0?$Nodo en M@@QAE en XZ)", sin embargo cuando hago la definicion del constructor "Nodo" en el archivo fuente donde esta main() (main.cpp) no me da el error, me gustaia saber cual es mi error. Yo uso Visual C++ 6.0.

El problema está en que las plantillas y sus definiciones deben permanecer en el mismo ámbito de fichero. Para tu caso, esto significa que no puedes hacer la típica organización de C/C++ separando las declaraciones en un fichero ".h" de las implementaciones en un fichero ".cpp". Debes incluir todo en el mismo fichero.

Esto es porque las plantillas son un concepto del compilador y no del enlazador. No existe código objeto (compilado) a partir de una plantilla, pero sí en base a una clase o función plantilla generada por el compilador.


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase