Problema con los campos protegidos en la clase base en c ++

Tengo una clase base, dicen BassClass , con algunos campos, que los he protegido, y algunas funciones virtuales puras. Luego la clase derivada, digamos DerivedClass , como la class DerivedClass : public BassClass . ¿No debería DerivedClass heredar los campos protegidos de BassClass? Cuando intenté comstackr DerivedClass, el comstackdor se queja de que DerivedClass NO tiene ninguno de esos campos, ¿qué está mal aquí? Gracias

Si BassClass (sic) y DerivedClass son plantillas, y el miembro de BassClass que desea acceder desde DerivedClass no se especifica como un nombre dependiente, no será visible.

P.ej

 template  class BaseClass { protected: int value; }; template  class DerivedClass : public BaseClass { public: int get_value() {return value;} // ERROR: value is not a dependent name }; 

Para acceder tienes que dar más información. Por ejemplo, puede especificar completamente el nombre del miembro:

  int get_value() {return BaseClass::value;} 

O puede hacer explícito que se refiere a un miembro de la clase:

  int get_value() {return this->value;} 

Esto funciona:

 #include  struct Base { virtual void print () const = 0; protected: int val; }; struct Derived : Base { void print () { std::cout << "Bases's val: " << val << std::endl; } };