我如何确保在类内部声明的枚举是托管枚举?

问题描述 投票:0回答:1

在Visual C ++(VS 2015)中,我可以如下定义托管枚举:

public enum class Pet {
    Cat,
    Dog,
    Hamster,
};

以及关键字“公共”至关重要。没有它,它将不会将Pet视为托管枚举,例如,您将无法使用Enum :: GetName访问与该枚举成员关联的文本。

但是,如果我尝试在类中声明一个枚举,就像这样:

class Construction {

public :

    public enum class Fixing {
        Nut,
        Bolt,
        Rivet,
    };

};

我收到此错误消息:

error C3379: 'Construction::Fixing': a nested class cannot have an assembly access specifier as part of its declaration

如果我从声明中删除“公共”,则这样:

class Construction {

public :

    enum class Fixing {
        Nut,
        Bolt,
        Rivet,
    };

};

然后添加以下代码:

int main(array<System::String ^> ^args)
{
    array<String^> ^names = Enum::GetNames( Construction::Fixing::typeid );
    for ( int i = 0; i < names->Length; ++i ) {
        Console::WriteLine( names[ i ] );
    }
    return 0;
}

然后它会毫无抱怨地进行编译,但是输出不是我所期望的。根本没有输出。深入研究,我发现Enum :: GetNames返回一个零长度的数组。似乎编译器将Fixing视为非托管枚举,并且对“枚举类”使用C ++ 11语法。

所以,如何更改代码,以便将Fixing设为托管枚举?

visual-c++ enums
1个回答
0
投票

我知道了。我需要确保在其中声明枚举的类是托管类,如下所示:

ref class Construction {

public :

    enum class Fixing {
        Nut,
        Bolt,
        Rivet,
    };

};

然后写出成员名称的代码起作用。但是,我仍然认为“ enum class Fixing”行看起来很含糊。目前尚不清楚这是一个托管枚举。

© www.soinside.com 2019 - 2024. All rights reserved.