我已经有以下代码,但变量System::String^ Name_
是nullptr
:
enum EWeapons
{
Fist = 0
}
System::String^ Name_ = Enum::GetName( EWeapons::typeid,0)
我已经有以下代码,但变量System::String^ Name_
是nullptr
:
enum EWeapons
{
Fist = 0
}
System::String^ Name_ = Enum::GetName( EWeapons::typeid,0)
您需要使用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
)来声明托管枚举类型。在本机枚举上无效,这是编译器可以区分的唯一方法。