[英]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
對象。
然后定義
shpia r;
這將在r
創建另一個dhoma1
,與第一個dhoma1
無關,該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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.