访问嵌套类的成员

Access members of nested class

本文关键字:成员 嵌套 访问      更新时间:2023-10-16
class A
{
        class B
        {
                int x;
        }
public:
        void printX() { std::cout << ????; }
}

如何从 A 类函数访问 x 变量?我也不能让它静态...

我尝试了所有方法,但它要么告诉我需要一个对象才能访问它,要么编译器找不到该函数。

它要么告诉我需要一个对象 [...]

一想。 因为这正是问题所在。

如果你实例化一个A你也不会得到一个B。嵌套类不是封闭类的成员变量。 这实际上只是更改类命名空间的另一种方法。

因此,您需要一个实例 B . 也许是A的成员?

class A
{
        class B
        {
        public:
                int x;
        } mB;
public:
        void printX() { std::cout << mB.x; }
};

你永远不会在 A 中声明类 B 的实例。你需要做这样的事情:

    class A
    {
            class B
            {
            public:
                    int x;
            };
            B b;
    public:
            void printX() { std::cout << b.x; }
    };

你没有。您确实需要一个对象才能使用 x 变量。但是,您可以将其设置为静态。您的示例的问题是 x 不是公开的。将 B 放在 A 中不会使 B 成为 A 的一部分,它只会改变 B 的范围。

从这个例子来看,你看起来有点像在继承。这会给你你想要的效果(访问所有B的方法和变量而不做一个对象。

Class B
{
protected:
    int x;
}
Class A : B
{
    void printX() { std::cout << x; }
}