无法使用外部类对象访问内部类成员

时间:2013-04-05 20:45:00

标签: c++

#include <iostream>

class Outer
{
    int o;
public:
    void setOuter(int o)
    {
        this->o=o;
    }
    class Inner
    {
    public:
        int i;
        int retOuter(Outer *obj)
        {
            return obj->o;
        }
    };
};

int main(int argc, char **argv) {
    Outer::Inner obj;
    obj.i=20;
    std::cout<<"Inner i = "<<obj.i<<std::endl;

    Outer *obj1=new Outer;
    obj1->setOuter(40);
    std::cout<<"Outer o = "<<obj.retOuter(obj1)<<std::endl;

    obj1->Inner::i =50; //Access the inner class members by Outer class object!
}

除了最后一行,上面代码中的所有内容都很好。为什么我无法使用外部类对象访问Inner类成员?外部类对象应具有class Outer的所有公共成员访问权限。当我创建一个内部类对象时,行为如何,因为它包含在外部类中!

1 个答案:

答案 0 :(得分:5)

Inner只是在不同范围内定义的类。这与说

没什么不同
class Inner
{
public:
    int i;
    int retOuter(Outer *obj)
    {
        return obj->o;
    }
};

然后

Inner::i =50

这显然是不可能的,因为i不是static

声明内部类不会自动声明可以使用该语法访问的外部类的该类型的成员。

现在,像:

class Outer
{
    int o;
public:
    void setOuter(int o)
    {
        this->o=o;
    }
    class Inner
    {
    public:
        int i;
        int retOuter(Outer *obj)
        {
            return obj->o;
        }
    } innerMember;
    //    ^^^
    // declare a member
};

int main(int argc, char **argv) {
    Outer *obj1=new Outer;
    obj1->innerMember.i =50; //Access the inner class members by Outer class object!
}

会起作用。