template class Tree { /// ... Tree() : _root(0) { } // Así lo declaro DENTRO de la clase } Tree::Tree() { // Así lo declaro FUERA de la clase _root = 0; } // ESTO ES UN ERROR: Tree::Tree() { } La clase "emplatillada" se llama Tree, por lo que su constructor se llama Tree::Tree ... Si ustedes lo llaman Tree::Tree (sin ), el compilador NO encuentra al constructor y da un error. ¿Por qué da un error de "linker"? Agradezcan que da error... y ¡pregúntenle a Stroustrup que fue quién escribió el compilador! Muchos errores de plantillas sólo salen a flote cuando uno instancia la plantilla. ============================================================== y dale con la misma historia ... Resulta que yo probé su recomendación en mi código; como dijo en el correo, los constructores se declaran sin dentro de la clase, pero la implementación de afuera sería clase::clase(). NO quizo servir. En sí, lo que puse fue lo siguiente: - template cont_Vector::cont_Vector(int totCamp) Y el compilador me indica que hay un error de sintaxis ("Declaration syntax error"). Como compilador yo utilizo el Borland. Por otro lado, pensé que podría ser problemas con el compilador y decidí pasar todo a Visual C++. Resulta que si me aceptó la sintaxis: --- template cont_Vector::cont_Vector(int totCamp) pero ni siquiera sé si es que la reconoce realmente o que los errores que muestra impiden que muestre el error de sintaxis. En fin, el error que me muestra es de link: "MAIN.OBJ : error LNK2001: unresolved external symbol "public: __thiscall sort_Burbj::sort_Burbj(void)" (??0?$sort_Burbj@H@@QAE@XZ)" Y esto me lo muestra a pesar de que ya está implantada la sintaxis que nos recomendó. Me gustaría saber si a alguien ya le funcionó para que me pegue un empujonsito en esto. Gracias ============================================================== ------- Forwarded message follows ------- Profe, noto que el inconveniente es a la hora de inicializar un objeto utilizando el comando "new", porque este comando exige poner el tipo del objeto "" (por ejemplo), además del atributo que se pasa. Ejemplo: contenedor = new cont_Vector(5) // exige la existencia de un método o constructor con la sintaxis cont_Vector::cont_Vector(int). Lo cual me parece que es sintácticamente imposible de implementar. Intenté hacer lo siguiente: crear un contructor sin parámetros: cont_Vector::cont_Vector() y así no tengo problemas para crear objetos. Pero surge otro inconveniente, aunque estén implementados los método me dice que no encuentra: cont_Vector::imprimir(); cont_Vector::intercambiar(); ... etc. Le cuento que he intentado por muchos métodos de lograr que la aplicación se trague las plantillas, no logro implementarlo!!. He hasta creado varios proyectos y los implemento de diferentes maneras: con las clases separadas por archivos, con todo el código en un solo archivo, creado diferentes constructores y declaraciones. No lo logro . no comprendo porqué diantres no lo logro . Alguna sugerencia? ------- End of forwarded message ------- ============================================================== Trucos de Emplantillado para la Tarea Programada 1) Hay que sacar al NODO de adentro de la clase LISTA, porque si lo dejan adentro NO compila. Protejan la impelentación dejando com PRIVADO el contructor del NODO, y hacieno amiga a la LISTA. 2) Hay que cambiar dentro del constructor del Vector, donde asigna la memoria al vector: Vector::Vector( int Cantidad ) { /// ... vec = new T [Cantidad]; } Sin el "T" en el "new T" no funca.