在二级后裔类中无法访问的基础

时间:2015-02-25 09:56:33

标签: c++

为什么我不能成为Grand类型的类成员?

class Grand
{};

class Father :private Grand
{};

class Son :public Father
{
    Grand g; //This gives error. Class Grand is Inaccessible.
};

3 个答案:

答案 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;
};