Tengo una clase base que se parece a la siguiente.Llamada al constructor base de la plantilla en la lista de inicialización del miembro error
template<typename T>
class Base
{
public:
Base(int someValue);
virtual T someFunc() =0;
};
template<typename T>
Base<T>::Base(int someValue)
{}
Y luego lo siguiente.
#include "base.hpp"
class Foo
: public Base<Foo>
{
public:
Foo(int someValue);
virtual Foo someFunc();
};
Foo::Foo(int someValue)
: Base(someValue)
{}
Recibo el siguiente error de gcc 4.2.1.
error: class ‘Foo’ does not have any field named ‘Base’
Debo mencionar esta compilación bien en mi caja de Fedora que está ejecutando gcc 4.6.2. Este error ocurre al compilar en mi máquina os x Lion.
Gracias de antemano por la ayuda.
EDITAR
problema parece que no estoy indicando el tipo de plantilla en la clase Foo al llamar al constructor. Lo siguiente corrige el error en os x.
: Base<Foo>(someValue, parent)
EDITAR
Sí, esto se ve como un error. Lo que mencioné antes corrige el error bajo os x y el código compila bien en fedora con esa corrección. Veremos y veremos si hay una actualización de gcc en os x.
[Qt se puede abstraer a partir de este completo.] (Http://ideone.com/tSWdI) –
Dup? http://stackoverflow.com/questions/3829040/scope-problems-in-template-c –