2010-12-22 40 views
31

來自當地大學夜間課程的C#背景,我開始使用C++開發自己的方式。有很多痛苦習慣語法。在編碼技術方面,我還很綠。如何在另一部分代碼中使用類的枚舉值?

從我的WinMain函數,我想能夠訪問一個變量,它正在使用我在另一個類中聲明的枚舉。

(inside core.h) 
class Core 
{ 
    public: 
    enum GAME_MODE 
    { 
     INIT, 
     MENUS, 
     GAMEPLAY 
    }; 
    GAME_MODE gameMode; 

    Core(); 
    ~Core(); 
    ...OtherFunctions(); 
}; 

(inside main.cpp) 
Core core; 
int WINAPI WinMain(...) 
{ 
    ... startup code here... 

    core.gameMode = Core.GAME_MODE.INIT; 

    ...etc... 
} 

基本上我想設置的遊戲模式給Init枚舉值或類似的東西從我的WinMain功能。我想也能夠從其他領域閱讀它。

我的錯誤...

expected primary-expression before '.' token 

如果我嘗試使用core.gameMode = Core::GAME_MODE.INIT;,然後我得到了同樣的錯誤。

我並不關心最佳實踐,因爲我只是想了解在C++之間傳遞文件間變量的基本知識。一旦我使用了語法的靈活性,我將確保變量受到保護並整齊地隱藏起來。

如果我沒有記錯的話,C#允許我使用其他類的Enums,而我所要做的只是類似於Core.ENUMNAME.ENUMVALUE

我希望我想要做的是明確的:\因爲我不知道什麼是正確的術語。

回答

40

使用

core.gameMode = Core::INIT; 

枚舉的各個值不是枚舉內,但在同級別的枚舉本身作用域。這是大多數其他語言(包括C#)有什麼不同,和的C++ 0x將允許這兩個變種,以便有,

core.gameMode = Core::GAME_MODE::INIT; 

也將是合法的。

另外,將在C++ 0X(enum class)待添加的強類型枚舉將把枚舉值枚舉的範圍內(即,作爲在C#);這解決了您在評論中注意到的問題:對於「普通」枚舉,枚舉值的標識符在同一範圍內定義的所有枚舉中必須是唯一的。

+0

甜的工作!感謝:) 現在我可以看到有很多關於枚舉需要具有不同的名稱,如果他們在同一命名空間 – ChiggenWingz 2010-12-22 06:40:57

相關問題