ก่อนอื่นคุณกำลังพยายามเข้าถึงสมาชิกที่ไม่คงที่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();
}
เอาต์พุต - var: 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);
}
เอาต์พุต - var: 1
แก้ไข - ลิงก์ภายนอกคือลิงก์ไปยังบล็อกของฉัน