У меня есть абстрактный класс A, от которого я унаследовал несколько классов. В производных классах я пытаюсь получить доступ к защищенной функции в указателе A через A. Но я получаю ошибку компилятора.
class A
{
protected:
virtual void f()=0;
};
class D : public A
{
public:
D(A* aa) :mAPtr(aa){}
void g();
protected:
virtual void f();
private:
A* mAPtr; // ptr shows to some derived class instance
};
void D::f(){ }
void D::g()
{
mAPtr->f();
}
Ошибка компилятора говорит: не удается получить доступ к защищенному члену A :: f, объявленному в классе A.
Если я объявляю mAPtr как D *, вместо A * все компилируется. И я не понимаю, почему это так.
}
, и вы забыли точку с запятой после определений вашего класса. Покажите нам реальный тестовый пример, пожалуйста; покажите нам тот, который вы использовали при тестировании / отладке с помощью codepad или ideone. (* кхм *) - person Lightness Races in Orbit   schedule 10.10.2011