访问嵌套类中的变量时出现问题
Problems in accessing variables in nested classes
我正在尝试访问我在嵌套类中声明的变量,但我无法在控制台上得到我想要的答案。我想要的结果是 100,但我得到的只是一个长数字。我似乎找不到错误。这是我写的:
#include <iostream>
using namespace std;
class shpia {
public:
int tot;
class dhoma1 {
public:
int gjatesi;
int di() {
return gjatesi * gjatesi;
}
};
dhoma1 dh1;
void redi(){
cout<<dh1.di();
}
};
int main()
{
shpia::dhoma1 k;
k.gjatesi = 10;
shpia r;
r.redi();
return 0;
}
你的结果并不令人惊讶。你似乎认为
shpia::dhoma1 k;
k.gjatesi=10;
将为要创建的所有对象定义shpia
dhoma1
。这是错误的。您刚刚定义了一个与shpia
对象无关的shpia::dhoma1
对象。
然后定义时
shpia r;
这将在r
中创建另一个 dhoma1
,与第一个无关,未初始化。因此,当你打印正方形时,你会变得毫无意义。
您正在访问未初始化的内存。在这里,您可以创建嵌套类的实例,并初始化其成员:
shpia::dhoma1 k;
k.gjatesi=10;
在这里,您创建主类的实例,该实例与k
无关。它已经定义了自己的嵌套类成员变量(r.dh1(
shpia r;
r.redi();
return 0;
由于这个新声明,嵌套的 r
类没有定义的值,当你调用 redi()
时,你将访问未定义的内存,因此得到一些随机数。根据应用程序的实际运行时布局,此值可能会更改。它是未定义的,您必须在使用它之前定义它。
要解决此问题,您应该改用主类的嵌套类成员,如下所示:
shpia r;
r.dh1.gjatesi = 10;
r.redi();
return 0;
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++理解计算字符变量的问题
- 在通知提升间处理条件变量时未按住锁会导致问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 将十六进制值设置为用于填充的字符变量时出现问题
- 初学者问题:如何访问此变量?
- 关于仅正确使用二传手和变量的问题
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 在 for 循环中更新两个变量时遇到问题C++
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题
- 模板类编译问题与 typedef 变量
- 简单的问题 - 如何从单独的"结构"内的'class'访问变量?
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 关于读取有效 c++ 第 4 项(将非局部静态变量替换为局部静态变量)的问题
- 我有几个关于参考变量的问题
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- OpenCV C++ Mat 类行和列 - 它们是成员变量(和相关问题)吗?
- 指向动态内存中结构中的变量时出现问题