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

Gilberto Cuba Ricardo gilbert en hlg.rimed.cu
Lun Mayo 10 03:06:30 CEST 2010


Programante escribió:

> Normalmente estas cosas se arreglan añadiendo la palabra typename en
> el lugar adecuado (el problema es que muchas veces el mensaje es confuso).

Y muy confusos, en ocasiones sorprendentemente enredados. Me he cogido
compilando yo a mente, para no romperme la cabeza con los mensajes y
los lugares donde me da los errores.

> 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

Vaya, voy a tener que sacudirme y darme una vueltecita por la 4.5, al
menos los mensajes son más claros. :)

> 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.

Un millón de gracias por tomarte el tiempo de probarlo y darme tu
solución. Problema arreglado.

Gracias nuevamente, pero no entiendo por qué tenga yo que agregar
el typename ahí. Sabe usted de la lógica de esto o tal vez otra
persona pueda aclararme por qué hay que incluir ese typename ahí
entre el "static" y el "register_class<T>".

-- 
Salu2,
 Gilbert





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