2017-11-18 201 views
0

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

回答

4

没有什么让你惊讶的结果。你似乎认为

shpia::dhoma1 k; 
k.gjatesi=10; 

将定义一个dhoma1为您将创建的所有shpia对象。这是错误的。您只定义了与shpia对象无关的shpia::dhoma1对象。

当你再定义

shpia r; 

这将在r另一dhoma1创建,无关的第一个,这是未初始化。因此,当你打印正方形时,你会感觉到无意义。

1

您正在访问未初始化的内存。 在这里,您创建嵌套类的实例,并初始化它的成员:

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; 
+0

谢谢。它解决了 –

+1

@SalvadoreRina如果这个答案解决了你的问题,然后接受它。欢迎来到这里:) –