为什么我不能成为Grand类型的类成员?
class Grand
{};
class Father :private Grand
{};
class Son :public Father
{
Grand g; //This gives error. Class Grand is Inaccessible.
};
答案 0 :(得分:4)
因为它在函数之前自动添加父类“spacename”,而且父:: Grand :: Grand()(构造函数)是私有的
class Grand
{};
class Father :private Grand
{};
class Son :public Father
{
::Grand g;
};
起作用是因为直接使用类Grand,而不是继承
答案 1 :(得分:3)
这解决了它:
class Grand
{};
class Father :private Grand
{};
typedef Grand MyGrand;
class Son :public Father
{
MyGrand g; // This now compiles successfully
};
问题在于私有的说明符会影响名称中的辅助功能但可见性。所以当你说Grand g
时,编译器首先会继承继承树,以防你最终解析像Grand::MyType
这样的东西。
答案 2 :(得分:0)
这是因为Grand
隐藏了Father
继承private
,请尝试使用全局范围:
class Son : public Father {
::Grand g;
};