访问嵌套类变量的问题
问题描述:
我想访问我在嵌套类中声明的变量,但是我无法在控制台上得到我想要的答案。我想要的结果是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;
将定义一个dhoma1
为您将创建的所有shpia
对象。这是错误的。您只定义了与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;
谢谢。它解决了 –
@SalvadoreRina如果这个答案解决了你的问题,然后接受它。欢迎来到这里:) –