Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: zupervaca en 05 de Agosto de 2005, 01:54:46 PM

Título: Templates C++
Publicado por: zupervaca en 05 de Agosto de 2005, 01:54:46 PM
 tengo un problema con los templates en c++ desde el .net 2003, tengo un .h y un .cpp que son estos:
  template <class t>
  class pruebas
  {
  public:
   pruebas();
   ~pruebas();

  };

  template <class t> pruebas<t>::pruebas()
  {
  }

  template <class t> pruebas<t>::~pruebas()
  {
  }

pues cuando intento crear la clase me dice que no encuentra el constructor, si lo pongo en el .h me funciona bien, el .cpp esta incluido en el proyecto con lo que esta compilandolo bien, ¿que sucede?

saludos
Título: Templates C++
Publicado por: Pogacha en 05 de Agosto de 2005, 02:12:11 PM
 Estas poniendo las definiciones y declaraciones en el .h?
Se requieren ambas en el .h o en el mismo hilo de compilación para que ande.
Saludos.

PD: no habia leido esto.
Citarpues cuando intento crear la clase me dice que no encuentra el constructor, si lo pongo en el .h me funciona bien, el .cpp esta incluido en el proyecto con lo que esta compilandolo bien, ¿que sucede?
Exactamente ... las funciones las crea una ves la instancia:

pruebas a; // aca sale corriendo y crea el juego de funciones templadas en int!

Re-Saludos

PD2: Aqui lo explica
http://babbage.cs.qc.edu/STL_Docs/templates.htm
Título: Templates C++
Publicado por: zupervaca en 05 de Agosto de 2005, 02:53:42 PM
 el ejemplo que pone de b.h y b.cpp no me funcione me da el mismo error que con pruebas.h y pruebas.cpp, es que esto antes funcionaba bien, realmente no lo entiendo
Título: Templates C++
Publicado por: Pogacha en 05 de Agosto de 2005, 03:05:32 PM
 Ese ejemplo que pone es para mostrarte que no anda así!

CitarWhen compiling B.cpp, the compiler has both the declarations and the definitions available. At this point the compiler does not need to generate any definitions for template classes, since there are no instantiations. When the compiler compiles main.cpp, there are two instantiations: template class B and B. At this point the compiler has the declarations but no definitions!

Traducido (por las dudas):
CitarCuando compila B.cpp, el compilador tiene sendas declaraciones y definiciones disponibles. En este punto el compilador no necesita generar definiciones para clases templadas, ya que no hay instanciaciones. Cuando el compilador compila main.cpp, hay dos instanciaciones, template class B y B. En este punto el compilador tiene declaraciones pero no definiciones!
Y esto es por que no anda, en las clases templables debes poner todas las declaraciones así como las definiciones en el mismo .h
Saludos.
Título: Templates C++
Publicado por: zupervaca en 05 de Agosto de 2005, 04:30:53 PM
 aps perdona es que no lo lei, directamente mire el codigo, vaya pues yo hace tiempo cuando usaba mas amenudo los templates me parece que usaba .h y .cpp, na pero esta claro que solo es el .h

gracias tiu