2012-12-25 88 views
1
//In Analyzer.h 

class Analyzer 
{ 
public : 
    enum color{red, green ,blue}; 
Analyzer() 
{ 
    cout<<"ctor"; 
} 
    ~Analyzer(); 
}; 

//In main.cpp 
#include"Analyzer.h" 
int main() 
{ 
    Analyzer *Ana = new Analyzer(); 
    Ana->color c ;//Error 
    Analyzer::color c ;//Ok 
    return 0 
} 

我很困惑爲什麼顏色不能被類對象訪問,因爲通過使用類名可以訪問它。枚舉器標記名稱不能被類對象訪問?

+4

enum是類中的一個類型,因此'Analyzer :: color'。如果它是一個靜態成員,那麼該語法就可以工作。然而,在這種情況下讓這種語法起作用是值得商榷的。其他語言只能選擇允許以等同於'ClassName :: member'的方式訪問靜態成員,就像內部類型以C++工作一樣。 – chris

+0

@chris ::因爲枚舉不是一個靜態的,所以它可以通過對象訪問嗎? – Kenta

+2

@viku問題不在於它是否是靜態的。問題是,它不是一個對象,而是一個類型。** – 2012-12-25 08:46:32

回答

3

會員接入運營商->.只能用於訪問該類的數據成員,枚舉成員和成員函數。順便說一句,使用這些運算符訪問靜態數據成員和函數是完全合法的,即使左邊不需要這樣的訪問(左邊的評估是任何情況)。

這些運算符不能用於訪問類的嵌套類型。

在你的例子中color是一個嵌套類型,這意味着Ana->color不是一個有效的構造。同時,Ada->red有效。

2

您只能通過箭頭操作符訪問類的數據成員和成員函數。枚舉是一個嵌套類型。

+0

謝謝,刪除了非靜態。 –