C++ 如何在外部类中声明的内部类中使用变量
C++ How to use a variable in a inner class that has been declared in Outer class
是否可以在外部类中声明的内部类中使用变量。 我想实现以下目标。可能吗。 我收到以下错误。
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)
发生的事情
相关文章:
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在向量内更改变量的值不会改变其在向量外的值
- 从内部类继承
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 既然我们有内联变量,extern const 还有用吗?
- 如何将枚举类转发声明为模板化类的内部类?
- 从内部类中的方法从包含类调用方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- C++模板类的内部类访问
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 使用类模板的内部类模板专用化模板
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- C++ 如何在外部类中声明的内部类中使用变量
- 在C++中将内部类实现为具有名称空间的独立类有什么好处
- 参数化类的别名(或类型定义)内部类
- 如何在没有setter的情况下设置类内部类的成员变量?
- 全局变量和内部类有什么区别?