C++ 如何在外部类中声明的内部类中使用变量

C++ How to use a variable in a inner class that has been declared in Outer class

本文关键字:内部类 变量 声明 C++ 外部      更新时间:2023-10-16

是否可以在外部类中声明的内部类中使用变量。 我想实现以下目标。可能吗。 我收到以下错误。

prog.cc:在构造函数 'Outer::Inner::Inner((' 中: prog.cc:12:25: 错误: 无效使用非静态数据成员 'Outer::i' Inner( ( { i = 5; };

#include <iostream>
using namespace std;
class Outer {
public:
int i;
class Inner; // forward declaration of Outer::Inner
friend class Inner;
class Inner {
Inner() {
i = 5;
};
};
};
int main() {
return 0;
}

与Java不同,C++"内部类"与创建它们的外部类没有联系。您必须传入指向外部类的指针或引用。

从在线提供的标准工作草案:

9.7 嵌套类声明 [class.nest]
一个类可以在另一个类中声明。在另一个类中声明的类称为嵌套类。嵌套类的名称是其封闭类的本地名称。嵌套类位于其封闭类的范围内。

例:

int x; 
int y;
struct enclose {  
int x; 
static int s;
struct inner { 
void f(int i) { 
int a = sizeof(x); // OK: operand of sizeof is an unevaluated operand 
x = i; // error: assign to enclose::x 
s = i; // OK: assign to enclose::s 
::x = i; // OK: assign to global x 
y = i; // OK: assign to global y 
} 
void g(enclose* p, int i) { 
p->x = i; // OK: assign to enclose::x 
} 
};     
}; 
inner* p = 0; // error: inner not in scope 

从文档中提供的示例中可以看出,嵌套类访问封闭类的非静态成员的唯一方法是通过指向封闭类的指针。

这就是void g(enclose* p, int i)发生的事情