C++ cli 如何将_值枚举从VS2003转换为VS2010 我有这个代码片段,从VS2003,管理C++,我想重写它在2010 C++ +CLI方式,但新的编译器不接受“特技”所有枚举。有人能告诉我如何正确地转换它吗

C++ cli 如何将_值枚举从VS2003转换为VS2010 我有这个代码片段,从VS2003,管理C++,我想重写它在2010 C++ +CLI方式,但新的编译器不接受“特技”所有枚举。有人能告诉我如何正确地转换它吗,c++-cli,C++ Cli,这是VS 2003中的代码片段: [Flags] __value enum Features: unsigned int { feature_1 = 1, feature_2 = 2, feature_3 = 4, feature_all = feature_1 | feature_2 | feature_3 // accepted by compiler }; 我试着在VS 2010中这样写:

这是VS 2003中的代码片段:

    [Flags]
    __value enum Features: unsigned int
    {
        feature_1 = 1,
        feature_2 = 2,
        feature_3 = 4,
        feature_all = feature_1 | feature_2 | feature_3   // accepted by compiler
    };
我试着在VS 2010中这样写:

    [FlagsAttribute]
    value class enum Features: unsigned int {
        feature1 = 1,
        feature2 = 2,
        feature3 = 4,
        feature_all = feature_1 | feature_2 | feature_3   // not accepted by compiler
    };
但是第二个肯定不起作用

编译器返回7个错误:(C2332、C2236、3x C2065、C2056和C3115)

正确的关键字是enum class,在C++11中也采用:

[FlagsAttribute]
public enum class Features: int {
    feature1 = 1,
    feature2 = 2,
    feature3 = 4,
    feature_all = feature1 | feature2 | feature3 
};
请注意,我还删除了神秘的下划线,假设您希望使此枚举类型对其他.NET项目可见,并希望它符合CLS,以便不支持未签名类型的语言可以使用它。int是默认值,可以省略。根据需要调整