我已经拥有以下代码,但变量System::String^ Name_
为nullptr
:
enum EWeapons
{
Fist = 0
}
System::String^ Name_ = Enum::GetName( EWeapons::typeid,0)
答案 0 :(得分: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关键字一起使用,例如override
和nullptr
。这对于enum class
来说是一个非常讨厌的问题,C ++ / CLI编译器确实区分了本机枚举和托管枚举类型。托管枚举最终出现在元数据中,而本机枚举则没有。当然,Enum :: GetName()不能用于本机枚举。
您必须使用辅助功能关键字(public
或private
)来声明托管枚举类型。在本机枚举上无效,编译器可以区分它的唯一方法。