簡體   English   中英

在嵌套類中訪問變量的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM