2014-07-09 21 views
0

在頭文件中我有一些基本上是這樣的不知道如何在頭文件中實現可訪問的枚舉?

#ifndef blah 
#define blah 

enum DataType 
{ 
    TextData, 
    IntData 

}; 


#endif 

而在另一個文件中我有

#include "previousheaderdefinedabove" 

int main(int argc, char *argv[]) 
{ 
    std::cout << DataType::TextData; 


    return 1; 
} 

然而,當我嘗試編譯,我得到

main.cpp:13:18: error: expected a class or namespace 
    std::cout << DataType::TextData; 

不知道我做錯了什麼,非常感謝任何幫助!我已經看到枚舉被用作類,但是爲什麼namespcae還不夠?

+4

枚舉值不枚舉下作用域。枚舉值與枚舉定義的範圍相同。 –

+3

爲了擴展Dark Falcon的說法,std :: cout << TextData;'將被編譯。 – dasblinkenlight

+1

如果您想要這種行爲並且您的編譯器支持C++ 11功能,請使用['enum class'](http://en.cppreference.com/w/cpp/language/enum)。 – 101010

回答

0

枚舉既不是名稱空間也不是類;其值與定義的範圍相同。在上面的示例中,枚舉值位於全局名稱空間中。

這意味着,在主,你應該有

std::cout << TextData; 

代替

std::cout << DataType::TextData; 
+0

這完全改變了在c + + 11 http://www.stroustrup.com/C++11FAQ.html#enum –