2013-03-10 44 views
0

我有VS2003,Managed C++的代碼片段,我想用2010 C++/CLI方式重寫它,但是較新的編譯器不接受'feature_all'枚舉。有人能告訴我如何正確轉換它?如何將__value enum從VS2003轉換爲VS2010

這是在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)

回答

1

正確的鍵ORD是枚舉類,在C++ 11還採用了:

[FlagsAttribute] 
public enum class Features: int { 
    feature1 = 1, 
    feature2 = 2, 
    feature3 = 4, 
    feature_all = feature1 | feature2 | feature3 
}; 

注意我怎麼也去掉了下劃線神祕,假設你想使這個枚舉類型設置爲向其他.NET項目,它希望符合CLS標準,因此可以被不支持無符號類型的語言使用。 int是默認值,可以省略。根據需要調整。