2

我已经有以下代码,但变量System::String^ Name_nullptr

enum EWeapons
{
    Fist    =   0   
}
System::String^ Name_ = Enum::GetName( EWeapons::typeid,0)
4

1 回答 1

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)来声明托管枚举类型。在本机枚举上无效,这是编译器可以区分的唯一方法。

于 2013-03-08T20:50:54.230 回答