2013-03-08 134 views

回答

8

你需要使用enum class關鍵字來聲明一個託管枚舉類型:

public enum class EWeapons 
{ 
    Fist = 0 
}; 
... 
System::String^ Name = Enum::GetName(EWeapons::typeid, (Object^)0); 

千萬提防無故障在更高版本的Visual Studio(VS2012及更高版本)中,C++ 11語言規範也採用了enum class關鍵字。與其他C++/CLI關鍵字一起使用,如overridenullptr。對於enum class來說這是一個非常討厭的問題,C++/CLI編譯器會區分本機枚舉類型和託管枚舉類型。受管枚舉最終在元數據中,本地枚舉不。當然,Enum :: GetName()不能用於本地枚舉。

必須使用輔助功能關鍵字(publicprivate)來聲明託管枚舉類型。對於本機枚舉無效,編譯器能夠區分這種差異的唯一方法。

+0

它沒有解決我的問題,Name_仍然是nullptr。 – 2013-03-08 20:55:05

+1

這當然_should_工作,但它不適用於我的VC++ 2012 RTM。即使MSDN上的Enum :: GetName示例也不起作用... – ildjarn 2013-03-08 21:18:37

+0

@ildjarn這應該算作一個錯誤。這只是MSDN的例子,它不工作! (使用Visual Studio 2012旗艦版) – 2013-03-08 21:24:28