В недействительном Y :: call ()
X objX;
objX.fun ();
// здесь вы пытаетесь получить доступ к защищенному члену objX, this
/ текущий объект Y
не содержит objX
в качестве базового объекта, они оба являются разными объектами. Вот почему вы не можете получить доступ к его участнику.
вы можете сделать Y
другом X
как решение, предложенное @ anycom.
Редактировать: я имею в виду, что из Y
(который унаследован от X
) вы можете просто вызывать защищенных / открытых членов "it" base class X
т.е. Доступ к базам просто. Но это не означает, что теперь вы можете получить доступ к защищенным членам всех объектов типа X
, поскольку вы пытаетесь получить доступ к этим членам из внешней области видимости класса X
, т. Е. Через объект X
. Вы знаете все эти правила, но, кажется, вы слишком много думали 0_o