Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con templates e includes

Estas en el tema de Problema con templates e includes en el foro de C/C++ en Foros del Web. Estimados, estoy con un pequeño problema en C++ respecto al uso de templates e includes que me tiene loco desde hace un par de días. ...
  #1 (permalink)  
Antiguo 25/06/2009, 23:32
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Problema con templates e includes

Estimados, estoy con un pequeño problema en C++ respecto al uso de templates e includes que me tiene loco desde hace un par de días. Agradeceré mucho sus ayudas y comentarios al respecto. La historia dice más o menos así:

Tengo una clase Colección que es simplemente un contenedor de objetos como podría ser un vector. En esta clase utilizo templates para poder almacenar en ella cualquier tipo de dato. Mas específicamente me interesa que Colección almacene enteros <int> y objetos del tipo Clase1 <Clase1>. Para dichos requerimientos mi código es:

coleccion.h
Código c++:
Ver original
  1. #ifndef __COLECCION__
  2. #define __COLECCION__
  3.  
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. template <class T>
  9. class Coleccion
  10. {
  11.       private:
  12.             vector<T> contenedor;
  13.       public:
  14.             Coleccion();
  15.             void agregar(T);
  16. };
  17.  
  18. template class Coleccion<int>;
  19. template class Coleccion<Clase1>;
  20.  
  21. #endif

coleccion.cpp
Código c++:
Ver original
  1. #include "coleccion.h"
  2.  
  3. using namespace std;
  4.  
  5. template <class T>
  6. Coleccion<T>::Coleccion()
  7. {
  8.      
  9. }
  10.  
  11. template <class T>
  12. void Coleccion<T>::agregar(T elemento)
  13. {
  14.       this->contenedor.push_back(elemento);
  15. }

clase1.h
Código c++:
Ver original
  1. #ifndef __CLASE1__
  2. #define __CLASE1__
  3.  
  4. #include "coleccion.h"
  5.  
  6. using namespace std;
  7.  
  8. class Clase1
  9. {
  10.       private:
  11.             int var1;
  12.             int var2;
  13.             Coleccion<int> contenedor;
  14.       public:
  15.             Clase1(int, int);
  16. };
  17.  
  18. #endif

clase1.cpp
Código c++:
Ver original
  1. #include "clase1.h"
  2.  
  3. using namespace std;
  4.  
  5. Clase1::Clase1(int var1, int var2)
  6. {
  7.       this->var1=var1;
  8.       this->var2=var2;
  9. }

El problema comienza cuando la clase Clase1 también quiere hacer uso de la clase Coleccion para almacenar enteros. La idea sería entonces tener una Coleccion de muchos Clase1 en donde Clase1 a su vez posee una Coleccion de enteros. Desde el main hago un include de clase1.h que a su vez hace un include de coleccion.h que muy amablemente me informa que obviamente Clase1 no ha sido definida. He probado una predeclaración de Clase1 pero los errores han estado lejos de desaparecer. Mi pregunta es entonces ¿existe alguna forma de realizar los includes de manera que Coleccion ya tenga definida a Clase1 y Clase1 ya tenga definida a Coleccion?

Les agradezco de antemano.
Saludos.
__________________
R4DS en español | R4DS en inglés
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:17.