Возможный дубликат:
не может вызвать функции, защищенные базовым классом?
Я не понимаю следующее, когда Derived наследует от Base, он получает доступ к его защищенным членам, к которым можно получить доступ через производные функции. Но если класс Base пытается получить доступ к своим членам из класса Derived (который сам разрешает доступ к Base), он не получает доступ, почему?
class Base {
protected:
int x;
};
class Derived : Base {
public:
void foo(Base* b);
};
void Derived::foo(Base* b) {
b->x = 2; // cannot access protected member,
// though Derived inherits from Base, why?
}