Trước hết, bạn đang cố gắng truy cập thành viên không tĩnh var
bên ngoài lớp không được phép trong C ++.
Câu trả lời của Mark là đúng.
Bất cứ thứ gì là một phần của Outer đều phải có quyền truy cập vào tất cả các thành viên của Outer, công khai hay riêng tư.
Vì vậy, bạn có thể làm hai điều, hoặc khai báo var
dưới dạng static
hoặc sử dụng tham chiếu của một thể hiện của lớp bên ngoài để truy cập 'var' (vì một lớp hoặc hàm bạn bè cũng cần tham chiếu để truy cập dữ liệu riêng tư).
Var tĩnh
Thay đổi var
thành static
Nếu bạn không muốn var
được liên kết với các thể hiện của lớp.
#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();
}
Đầu ra- var: 1
Var không tĩnh
Tham chiếu của một đối tượng là phải truy cập bất kỳ biến thành viên không tĩnh nào.
#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);
}
Đầu ra- var: 1
Chỉnh sửa - Liên kết bên ngoài là liên kết đến Blog của tôi.