我试图这样做,
class Outer {
public:
struct inner_t {
void foo()
{
printf("%d", _x);
}
};
int _x;
};
int main()
{
Outer o;
o._x = 10;
}
以上无法编译错误:
错误:无效使用非静态数据成员'Outer :: _ x'
但根据this post,inner_t
确实可以访问Outer::_x
,这有什么不对?
答案 0 :(得分:6)
问题是:inner_t
不知道从Outer
读取_x
的实例。
如果你写过(例如):
void foo(const Outer *o)
{
printf("%d", o->_x);
}
或者_x
是Outer
的静态成员。
然后它应该工作(至少它不会给出任何错误)。
答案 1 :(得分:2)
您确实可以访问_x
类型的Outer
对象。您基本上尝试以静态方式访问实例字段。传递Outer
的实例,然后使用它。