【问题标题】:C++: How can I access a method of an inner class?C++:如何访问内部类的方法?
【发布时间】:2026-01-26 06:50:01
【问题描述】:

我正在通过classes 并考虑做嵌套类。所以我有下面的类声明。

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

如您所见,myClass 中有一个方法 method2。下面的代码可以正常工作,并为我提供所需的输出。

myClass obj;
obj.method1();

但是当我尝试这个时:

obj.method2();

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

问题:

  1. 为什么我不能访问方法'method2from objects of classmyClass`?
  2. 有没有办法访问method2

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

我想知道有没有其他出路,因为我的方式似乎有点痛苦。

【问题讨论】:

  • 嵌套类如何“开箱即用”?
  • @Happy 开心吗?我根据你的喜好编辑了 :)
  • SO 上的很多人都有些刻薄、投反对票的问题,因为您问的问题不够完美。他们应该只留下评论并告诉您解决问题。
  • @einpoklum:这是对你投票权的滥用。您应该对内容进行投票,而不是对其他人的投票。你已经明确表示你没有这样做。简而言之,“撤销”他人的投票权不是你的工作。话虽如此,我也无法理解这种情况下的反对意见。
  • @einpoklum:哦,你最后的评论是错误。投票机制的存在是有原因的。如果没有人投反对票,那有什么意义呢?我们将如何排列问题?我们能做到这一点很好。不过,在这种情况下,它似乎又被打破了,因为这个问题从来都不是特别糟糕。虽然我不确定我是否能看到它帮助其他任何人,这可能是问题所在。

标签: c++ function class inner-classes


【解决方案1】:

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

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

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

请注意,这要求您将myClass2::Class2() 设为公共成员。它在您的代码中是私有的。

【讨论】:

  • 我不太清楚如何实现你的答案的2),你能告诉我
  • @MohitBhasi 我添加了一个示例。
  • ` myClass::myClass2 obj; obj.Class2();` 我得到一个错误
  • 表示该功能不可访问
  • @MohitBhasi 那是因为您将其设为私有。公开。
【解决方案2】:

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) 为什么我不能使用 myClass obj 访问函数 Class2。

因为Class2 不是myClass 的成员。它是myClass2 的成员,您需要像使用myClass 一样实例化它。

2) 有没有办法访问 Class2 函数。

是的,通过实例化 myClass2,就像在我的示例末尾:myClass::myClass2 obj2; obj2.Class2();

【讨论】:

  • 谢谢你的回答:)