2011-04-24 19 views
1

爲什麼只能創建一個內聯類作爲封閉類的成員? 它是如何在內存aranged爲什麼它會防止這種情況,例如:C++,內部類和爲什麼只能創建成員作爲指針

class temp 
{ 
    public: 

    class inner 
    { 
    public: 
     inner(int a = 0) : memberInt(a) {} 
     const int memberInt; 
    }; 

    temp(int i = 0) : member(i) 
    { 
    } 
    inner *i; // this works 
    inner i; // this doesn't 
    int member; 
}; 

在此先感謝:-)。

+0

你的前提是'內我;'是無效的不正確。 'inner * i;'和'inner i;'都是'temp'中成員變量的有效聲明。什麼編譯器拒絕'內心我''? [在一個不相關的說明中,最好在C++中將其稱爲_nested class_,以避免與Java中的_inner classes_混淆,這是完全不同的。] – 2011-04-24 01:04:00

+0

我確信這是完全合法的,使用它很多倍。我明白爲什麼它不合法的唯一原因是,如果你在內部類之前聲明瞭成員 - 你仍然可以使用前向聲明來製作指針。 – Damon 2011-04-24 01:09:33

+0

我在這裏看到的唯一「非法」事情是他在臨時班級中有兩個名爲「我」的標識符。 – 2011-04-24 01:12:09

回答

2

上面的代碼實際上在g ++中編譯得很好,假設我將第二個(內部i)重命名爲內部i2。

這是確切的代碼我用g ++編譯:

class temp 
{ 
    public: 

    class inner 
    { 
    public: 
     inner(int a = 0) : memberInt(a) {} 
     const int memberInt; 
    }; 

    temp(int i = 0) : member(i) 
    { 
    } 

    inner *i; 
    inner i2; 
    int member; 
}; 


int main() 
{ 
    return 0; 
} 
+0

我有它的工作,因爲你有它,但有一點是我的來源有點不同,我已經將參數傳遞給i2對象的構造函數,這確實給了我錯誤,併爲什麼?謝謝:-) – rubixibuc 2011-04-24 01:20:57

+0

sry啞巴問題,我應該通過那些在臨時X-( – rubixibuc 2011-04-24 01:22:15

+0

@rubixibuc的構造函數:你可以發佈確切的代碼給你一個錯誤? – 2011-04-24 01:22:25

相關問題