Quote:
Originally Posted by The Wicker Man Recurro a ustedes para ver si me pueden solucionar un problema que tengo con un tp en el que hay que implementar templates. El tp consiste en implementar una clase Sistema (de ecuaciones) que a traves de una funcion calcule la solucion del sistema. La clase Sistema tiene como atributos una matriz tipo Matriz (clase Matriz) y un vector tipo Vector. El tp ya esta terminado, pero lo unico que falta es implementar las clases Matriz y Vector con templates y ahi surgen los problemas de compilacion. Lo que lei y me enseñaron es que para implementar una clase con template hay que definir antes de la clase:
//Clase.h
template <class T>
class Clase{
T atributo1;
(...)
}
Cuando quiero instanciar un objeto de esa clase con T = int hago
Clase <int> objeto;
La pregunta es la siguiente. En otra clase Clase2, que tiene un atributo del tipo de Clase, como me refiero a esa clase, que usa templates?
Si lo hago asi me dice que Clase no es un tipo
//Clase2.h
class Clase 2{
Clase atributo1;
}
Y si hago asi me dice que T no esta definido en el scope
//Clase2.h
class Clase 2{
Clase<T> atributo1;
}
Tambien el problema lo tengo en el constructor de Clase2, que recibe un tipo Clase:
Clase2(Clase&);
si lo dejo asi, supongamos que en el main defino
Clase <float> objeto;
Clase2(objeto);
me dice que no encuentra el constructor que recibe Clase2(Clase<float>&).
Por otro lado, me exigen tener las definiciones de las clases en archivos .h separados, la implementacion de las funciones de cada clase en un .cpp respectivo y luego tener el main.cpp aparte.
Como tendria que ser la sintaxis para que esto ande?
Muchas gracias |
mucho c++ no manejo, pero el problema que tenes es que cuando usas algo de la clase "Clase" (podrias empezar por ponerle nombres mas felices) al ser un template tenes que ponerle el tipo en el cual se instancia. no podes hacer esto:
//Clase2.h
class Clase 2{
Clase atributo1;
}
porque directamente no le pones ningun tipo.....y tampoco podes hacer eso:
//Clase2.h
class Clase 2{
Clase<T> atributo1;
}
porq T ahi no existe, no es ningun tipo.
El otro problema que mencionas te pasa lo mismo:
Clase2(Clase&);
ahi estas usando Clase sin parametrizar.
Por lo que decis estas intentando definir dos clases, Matriz y Vector. Asumo que Vector es tu clase parametrica "Clase" y la Matriz es la "Clase2" y queres enchufarle los vectores a la matriz (o sea q la matriz sea una coleccion de vectores). Mas alla de los problemas que tenes, me parece q conceptualmente está mal. Un vector es una matriz, hace la clase paramatrica matriz y listo, olvidate del vector.