PDA

Ver la versión completa : dudas c++ parte 9999



serlioner
25/02/2014, 20:47
Hola, como es costumbre ya, siempre que algo no me sale, ya sea por falta de conceptos o falta de explicación por parte de mis profesores acudo aquí a daros el coñazo un poco a ver si podéis ayudarme. Mi problema es que me pusieron a crear una clase que trabaje con listas de la stl, pero nos ponen que hagamos para que se pueda meter cualquier tipo de variable, así que yo tengo la clase
template<class G>
class Lista
y las funciones fuera de la clase
template<class G> void unionConjuntos(Lista a<G>(), Lista b<G>());
Pues bien, al compilar me da fallo en la función y no se a que se debe, seguramente la este declarando mal, pero no se cual es la forma correcta, gracias de nuevo por adelantado.

Jurk
25/02/2014, 22:59
si no me acuerdo mal, los templates sirven solo para la siguiente linea, pon lo del template antes de cada funcion...

los templates no son como los typedef... no tienen un alcance de fichero

-----Actualizado-----

De hecho esto SI compila


#include <iostream>using namespace std;


int main()
{
return 0;


}




template <typename T>
void funcion1 (T variable1, T variable2)
{




}


template <typename T>
T funcion2 (T variable1, T variable2, int a)
{

return variable1 + variable2;
}

swapd0
25/02/2014, 23:00
¿Si quieren que trabaje con las slt para que creas una clase lista? ¿Por que no usas stl::list?

El prototipo de la función union esta mal. Seria así:


template<typename T> // da igual typename que class
void unionConjuntos(Lista<T> &a, const Lista<T> &b)
{
// el resultado estara en la lista a.
}


PD: cuando uses template todo va en el fichero .h, no puedes poner la implementación en el .cpp

serlioner
25/02/2014, 23:54
escribí un mensaje agradeciendo, se ve que no envío, bueno muchísimas gracias, al final viendo lo que puse aquí etc me siento ridículo del pego que era y lo que lié intentando arreglarlo, la próxima vez lo pensare en frío, gracias jurk y (http://www.gp32spain.com/foros/member.php?18592-swapd0) swapd0.