访问嵌套类中的变量时出现问题

Problems in accessing variables in nested classes

本文关键字:问题 变量 嵌套 访问      更新时间:2023-10-16

我正在尝试访问我在嵌套类中声明的变量,但我无法在控制台上得到我想要的答案。我想要的结果是 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;