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

Gilberto Cuba Ricardo gilbert en hlg.rimed.cu
Dom Mayo 9 16:03:34 CEST 2010


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:

----------------------------------------------------
#include <string>

  class IClass {
    };

  class HIClass : public IClass {
    };

  template <typename T>
  class EmptyClass : public IClass
    {
      public:
        virtual std::string get_classid()
          {
            return "";
          }

        virtual size_t class_size()
          {
            return 0;
          }
    };

  template <typename T>
  struct register_class
    {
      typedef EmptyClass<T> type;
    };

  template <typename T>
  IClass* get_data_class()
    {
      static register_class<T>::type cclass = EmptyClass<T>();
      return &cclass;
    }


int main() {

  get_data_class<HIClass>();

  return 0;
}
----------------------------------------------------

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

-- 
Salu2,
 Gilbert





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