Следующий код не компилируется в GCC 4.9.1:Невозможно вызвать виртуальный защищенный метод в производном классе
class A
{
protected:
virtual void f() {}
};
class B : public A
{
protected:
virtual void f() override { A* a = new A; a->f(); }
};
я получаю следующее:
header.h: In member function 'virtual void B::f()':
header.h:51:17: error: 'virtual void A::f()' is protected
Я бы ожидал, что это компиляции.
Почему это не удается? Есть ли лучший способ сделать f() общедоступным?
Ok. Странно, что я могу поклясться, что раньше видел что-то подобное, и он успешно скомпилировался. – Silicomancer
Возможно, вы уже отметили 'f()' public ... Я добавил пример anyways –
Возможно. Может ли это быть зависеть от компилятора? Я использовал VC++ – Silicomancer