[C con Clase] Un error con plantillas en GCC y no en Visual Studio

Programante programante en gmail.com
Dom Mayo 9 22:31:51 CEST 2010


El 09/05/10 16:03, Gilberto Cuba Ricardo escribió:
> Hola Lista,
>
>   La verdad es que no puedo ver cuál es el error que tengo en el
>   siguiente programa, porque me compila bien en Microsoft Visual
>   Studio 2005 y cuando lo compilo en uno de GCC: MingW32 y g++ 3.4.x
>   de Debian Linux me devuelve varios errores en cosas que no entiendo.
>   Por favor si alguien tiene alguna idea de esto que me de la luz. A
>   continuación los dejo con un ejemplo del programa:
>   
(...)
> El error devuelto es:
> In function 'IClass* get_data_class()':
> error: expected initializer before "cclass"
> error: 'cclass' was not declared in this scope
>
> La idea mía es que el error viene por el lio de las plantillas, pero
> no sé donde pudiera estar. Digo esto porque ya me he encontrado con
> otros errores parecidos (que compilan en MVS y no en GCC), y todo
> es a partir de una versión en específico del gcc, y que son muy
> comentados en la internet, por ejemplo: "too few template parameter
> lists" -algo así.
>   
Normalmente estas cosas se arreglan añadiendo la palabra typename en
el lugar adecuado (el problema es que muchas veces el mensaje es confuso).
Con GCC 4.5 el mensaje de error que me da es:
En la función ‘IClass* get_data_class()’:
error: se necesita ‘typename’ antes de ‘register_class<T>::type’ porque
‘register_class<T>’ es un ámbito dependiente
error: ‘cclass’ no se declaró en este ámbito
Cambiando
static register_class<T>::type cclass = EmptyClass<T>();
a
static typename register_class<T>::type cclass = EmptyClass<T>();
compila sin ningún tipo de warning.






Más información sobre la lista de distribución Cconclase