我創建了一個這樣的列舉:
enum class CATEGORIES{
C01 = 0x00000001,
C02 = 0x00000002,
C03 = 0x00000004,
...
C26 = 0x02000000,
C27 = 0x04000000,
C28 = 0x08000000,
C29 = 0x10000000,
C30 = 0x20000000,
C31 = 0x40000000,
C32 = 0x80000000, //Error at this line
}
列舉器值計算為 2147483648,不能縮小到型別“int”
我該如何解決?我只是想要一種方便的方式來表示類別,列舉類似乎對命名空間有意義..
uj5u.com熱心網友回復:
0x800000002147483648以 10為基數,并且int(在大多數編譯器上為32 位)不能包含2147483648
你應該做這個:
enum class CATEGORIES : unsigned long{
C01 = 0x00000001,
C02 = 0x00000002,
C03 = 0x00000004,
...
C26 = 0x02000000,
C27 = 0x04000000,
C28 = 0x08000000,
C29 = 0x10000000,
C30 = 0x20000000,
C31 = 0x40000000,
C32 = 0x80000000,
}; // also you seem to miss this semicolon
uj5u.com熱心網友回復:
有人提出以下建議,然后洗掉了他們的評論,但它似乎有效,使底層型別為 unsigned int:
enum class CATEGORIES : uint32_t{
...
}
uj5u.com熱心網友回復:
沒有明確指定CATEGORIESis的基礎型別int,并且0x80000000( 2147483648)int在您平臺上的范圍之外。
您可以明確指定更大的型別(例如long,取決于您的需要)作為基礎型別。
enum class CATEGORIES : long {
C01 = 0x00000001,
C02 = 0x00000002,
C03 = 0x00000004,
...
C26 = 0x02000000,
C27 = 0x04000000,
C28 = 0x08000000,
C29 = 0x10000000,
C30 = 0x20000000,
C31 = 0x40000000,
C32 = 0x80000000,
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/378905.html
