Почему простое упоминание базового указателя / ссылки в последующих закрытых классах запрещено?
struct B {};
struct D : private B {
B* fun () { return new D; } // ok
}
struct DD : public D {
B* foo () { return 0; } // error: ‘struct B B::B’ is inaccessible !
};
Эта ошибка кажется мне необоснованной. Если мы можем использовать простойB*
в глобальном масштабе, то почему не в его частных классах?демо g ++
Мы не пытаемся конвертироватьDD*
вB*
, что запрещено правилами языка (этот,этот,этот связанные вопросы).
Обратите внимание, что если я изменюB* foo()
вint foo()
все идет хорошо.