【发布时间】:2020-05-06 08:59:17
【问题描述】:
在 Visual C++ (VS 2015) 中,我可以如下定义托管枚举:
public enum class Pet {
Cat,
Dog,
Hamster,
};
关键字“public”非常重要。如果没有它,它将不会将 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
如果我从声明中删除“public”,如下所示:
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