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 キーワードoverrideとともにnullptr。これは にとってかなり厄介な問題ですenum class。C++/CLI コンパイラは、ネイティブの列挙型と管理された列挙型を区別します。管理された列挙型は最終的にメタデータに入りますが、ネイティブ列挙型はそうではありません。もちろん、Enum::GetName() はネイティブ列挙型では機能しません。

マネージド列挙型を宣言するには、アクセシビリティ キーワード (または) を使用する必要があります。コンパイラが違いを見分ける唯一の方法である、ネイティブの列挙型では無効です。publicprivate

于 2013-03-08T20:50:54.230 に答える