2017-11-18 170 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如果這個答案解決了你的問題,然後接受它。歡迎來到這裏:) –