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

Sou*_*Roy 0 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!
}
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*ore 5

Inner只是在不同范围定义的类.这跟说不一样

class Inner
{
public:
    int i;
    int retOuter(Outer *obj)
    {
        return obj->o;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后

Inner::i =50
Run Code Online (Sandbox Code Playgroud)

这显然是不可能的,因为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!
}
Run Code Online (Sandbox Code Playgroud)

会工作.