Problem with protected fields in base class in c++
c++, field, inheritance, protected
Solution
If `BassClass` (sic) and `DerivedClass` are templates, and the `BassClass` member you want to access from `DerivedClass` isn't specified as a dependent name, it will not be visible.
E.g.
template <typename T> class BaseClass {
protected:
int value;
};
template <typename T> class DerivedClass : public BaseClass<T> {
public:
int get_value() {return value;} // ERROR: value is not a dependent name
};
To gain access you need to give more information. For example, you might fully specify the member's name:
int get_value() {return BaseClass<T>::value;}
Or you might make it explicit that you're referring to a class member:
int get_value() {return this->value;}
Problem
I have a base class, say `BassClass`, with some fields, which I made them protected, and some pure virtual functions. Then the derived class, say `DerivedClass`, like `class DerivedClass : public BassClass`. Shouldn't DerivedClass inherit the protected fields from BassClass? When I tried to compile the DerivedClass, the compiler complains that DerivedClass does NOT have any of those fields, what is wrong here? thanks