类内类访问外部类的数据成员

a in-class class access the outer class's data member

本文关键字:数据成员 访问 外部      更新时间:2023-10-16

我试图这样做,

class Outer {
public:
    struct inner_t {
        void foo()
        {
            printf("%d", _x);
        }
    };
    int _x;
};
int main()
{
    Outer o;
    o._x = 10;
}

以上无法编译错误:

错误:非静态数据成员"外部::_x"的使用无效

但根据这篇文章,inner_t确实可以访问Outer::_x,怎么了?

问题是:inner_t不知道要从中读取_xOuter实例。

如果您写过(例如):

void foo(const Outer *o)
{
    printf("%d", o->_x);
}

或者,如果_xOuter的静态成员.然后它应该可以工作(至少它不会出错)。

您确实可以访问Outer类型的对象的_x。您基本上尝试以静态方式访问实例字段。传递Outer的实例,然后使用它。