C++:如何访问内部 class 的方法?

C++: How can I access a method of an inner class?

我正在经历 classes 并想到做嵌套 classes.So 我有下面的 class 声明。

class myClass {
    public:
        void method1() {
            cout << "This is method 1" << endl;
        }
        class myClass2 {
            void method2() {
                cout << "This is method 2" << endl;
            }
        };
};

如您所见,myClass 在下面的 it.The 代码中有一个方法 method2 工作得很好并且给了我想要的输出。

myClass obj;
obj.method1();

但是当我尝试这个时:

obj.method2();

我收到错误消息 method2 is not a member of myClass

问题:

  1. 为什么我无法访问方法“method2from objects of classmyClass”?
  2. 有没有办法访问method2

对于问题2,我想在myClass中创建一个classmyClass2的对象,然后在myClass中创建另一个函数来访问method2 函数。

我想知道有没有别的出路,因为我的方式好像有点pain staking。

1) 因为Class2()不是myClass的成员。

2) 你需要实例化一个myClass::myClass2对象并调用它的成员。 myClass2::Class2() 是一个成员函数,所以它需要一个对象来作用。例如

myClass::myClass2 obj;
obj.Class2();

请注意,这需要您使 myClass2::Class2() 成为 public 成员。它在您的代码中是私有的。

class2 放在 class1 中的效果比您想象的要小。它只是把它放在 class1 的范围内。

所以,想象同样的事情但没有嵌套:

class myClass
{
public:
    void Class1()
    {
        cout<<"This is Class 1"<<endl;
    }
};
class myClass2
{
public:
    void Class2()
    {
        cout<<"This is Class 2"<<endl;
    }
};

...

// and this should look normal to you:
myClass obj;
obj.Class1();

myClass2 obj2;
obj2.Class2();

现在把 myClass2 放在 myClass 范围内,就像你做的那样,看看最后几行有什么变化。

class myClass
{
public:
    void Class1()
    {
      cout<<"This is Class 1"<<endl;
    }
    class myClass2
    {
    public:
        void Class2()
        {
            cout<<"This is Class 2"<<endl;
        }
    };
};

...

myClass obj;
obj.Class1();

myClass::myClass2 obj2;// this is the only thing that changes. You put myClass2 in a different scope.
obj2.Class2();

所以直接回答你的问题:

1) Why cant I access the function Class2 using the myClass obj.

因为Class2不是myClass的成员。它是 myClass2 的成员,您需要像 myClass.

一样对其进行实例化

2) Is there a way to access Class2 function.

是的,通过实例化一个 myClass2,就像我的例子的结尾:myClass::myClass2 obj2; obj2.Class2();.