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
#ifndef __COLECCION__ #define __COLECCION__ #include <vector> using namespace std; template <class T> class Coleccion { private: vector<T> contenedor; public: Coleccion(); void agregar(T); }; template class Coleccion<int>; template class Coleccion<Clase1>; #endif
coleccion.cpp
Código c++:
Ver original
#include "coleccion.h" using namespace std; template <class T> Coleccion<T>::Coleccion() { } template <class T> void Coleccion<T>::agregar(T elemento) { this->contenedor.push_back(elemento); }
clase1.h
Código c++:
Ver original
#ifndef __CLASE1__ #define __CLASE1__ #include "coleccion.h" using namespace std; class Clase1 { private: int var1; int var2; Coleccion<int> contenedor; public: Clase1(int, int); }; #endif
clase1.cpp
Código c++:
Ver original
#include "clase1.h" using namespace std; Clase1::Clase1(int var1, int var2) { this->var1=var1; this->var2=var2; }
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.