我已经有了以下代码,但是变量 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 编译器确实区分了 native 枚举和托管枚举类型。托管枚举最终出现在元数据中,而 native 枚举则没有。当然,Enum::GetName() 不能用于原生枚举。
您必须使用可访问性关键字(public
或private
)来声明托管枚举类型。对 native 枚举无效,这是编译器区分差异的唯一方法。
关于visual-c++ - 如何在 C++ CLI 中获取枚举项的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302884/