首先,您试图访问var
C++ 中不允许的类之外的非静态成员。
马克的回答是正确的。
任何属于 Outer 一部分的东西都应该可以访问 Outer 的所有成员,无论是公共的还是私人的。
所以你可以做两件事,要么声明var
为static
或使用外部类实例的引用来访问'var'(因为朋友类或函数也需要引用来访问私有数据)。
静态变量
更改var
为static
如果您不想var
与类的实例相关联。
#include <iostream>
class Outer {
private:
static const char* const MYCONST;
static int var;
public:
class Inner {
public:
Inner() {
Outer::var = 1;
}
void func() ;
};
};
int Outer::var = 0;
void Outer::Inner::func() {
std::cout << "var: "<< Outer::var;
}
int main() {
Outer outer;
Outer::Inner inner;
inner.func();
}
输出变量:1
非静态变量
对象的引用是访问任何非静态成员变量的必要条件。
#include <iostream>
class Outer {
private:
static const char* const MYCONST;
int var;
public:
class Inner {
public:
Inner(Outer &outer) {
outer.var = 1;
}
void func(const Outer &outer) ;
};
};
void Outer::Inner::func(const Outer &outer) {
std::cout << "var: "<< outer.var;
}
int main() {
Outer outer;
Outer::Inner inner(outer);
inner.func(outer);
}
输出变量:1
编辑 - 外部链接是指向我的博客的链接。