2011-06-10 55 views
5
class A { 
    public: enum class { HELLO, WORLD }; 
}; 

已經知道,一個class內,宣告一個簡單的enum(而不是enum class)是一個好主意,因爲它已經與class識別輸入。但上述聲明仍然是有效的C++0x簽名。現在如何訪問外部未命名的enum class如何訪問封裝在類中的未命名的「枚舉類」?

int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’ 

回答

8

其實這是無效的。 C++ 0x FDIS說(9.2p1)

除用於聲明好友(11.3)或將基類成員的名稱引入派生類(7.3.3)時,member-聲明聲明類的成員,並且每個這樣的成員聲明應聲明該類的至少一個成員名。

就你的情況而言,沒有枚舉器名稱被引入類的範圍,也沒有引入枚舉名稱。因此,該成員聲明中沒有引入任何成員名稱。

編輯:而實際上,有一個更直接的禁止枚舉聲明。 7.2p2:

可選的標識符在範圍枚舉的聲明中不應省略。

+0

這意味着我們不能讓它的對象在構造函數中初始化。所以這樣的'enum'將完全與外部世界斷開,對嗎? – iammilind 2011-06-10 03:42:44