簡體   English   中英

qt QFlags:有符號值超出枚舉常量的范圍

[英]qt QFlags: signed value is out of range for enum constant

我在構建 qt C++ 項目時收到了枚舉值xxxxx920P4以下警告。 而且我在調試中發現xxxxx920P4現在等於xxxxxundefine0x00000000 ),這導致了意想不到的結果。 我應該如何解決這個問題?

我使用的是 Qt 版本:4.8.7 和 Visual Studio 2010。

下面的循環不會被執行。 gVersions[0].verNum"xxxxx920P4" ,所以我猜"xxxxx920P4"的值已被截斷,現在它等於0x00000000

for(int i=0; gVersions[i].verNum != xxxxxundefine ; i++)
{
}

Qt Qflags 類的文檔: https ://doc.qt.io/qt-5/qflags.html

warning C4341: 'xxxxx920P4' : signed value is out of range for enum constant
    
warning C4309: 'initializing' : truncation of constant value
enum Version
{
    xxxxxundefine   = 0x00000000,
    xxxxx400     = 0x00000001,
    xxxxx401     = 0x00000002,
    xxxxx410     = 0x00000004,
    xxxxx411     = 0x00000008,
    xxxxx412     = 0x00000010,
    xxxxx420     = 0x00000020,
    xxxxx430     = 0x00000040,
    xxxxx431     = 0x00000080,
    xxxxx432     = 0x00000100,
    xxxxx440     = 0x00000200,
    xxxxx500     = 0x00000400,
    xxxxx510     = 0x00000800,
    xxxxx520     = 0x00001000,
    xxxxx521     = 0x00002000,
    xxxxx600     = 0x00004000,
    xxxxx611     = 0x00008000,
    xxxxx620     = 0x00010000,
    xxxxx621     = 0x00020000,
    xxxxx700     = 0x00040000,
    xxxxx910     = 0x00080000,
    xxxxx910P5   = 0x00100000,
    xxxxx910P6   = 0x00200000,
    xxxxx910P11  = 0x00400000,
    xxxxx910P12  = 0x00800000,
    xxxxx910P13  = 0x01000000,
    xxxxx910P14  = 0x02000000,
    xxxxx910P15  = 0x04000000,
    xxxxx910P16  = 0x08000000,
    xxxxx920     = 0x10000000,
    xxxxx920P1   = 0x20000000,
    xxxxx920P2   = 0x40000000,
    xxxxx920P3   = 0x80000000,
    xxxxx920P4   = 0x100000000,
}; Q_DECLARE_FLAGS(Versions, Version)

最后一個值太長long無法放入非長整數。 雖然較新的編譯器可能會嘗試為其選擇更大的整數類型,但一些較舊的編譯器會抱怨。 除非您明確選擇類型,否則 GCC 傾向於使用前者。 請注意,倒數第二個值 0x80000000 或涉及它的任何掩碼組合都不適合int ,它本質上是負數 -2147483648。

 enum Version : long long  
 {
     //...
     xxxxx920P4   = 0x100000000,
 }; 

附注。 顯然 Qt5 不支持與 ( unsigned ) int不同的東西: https ://doc.qt.io/qt-5/qflags.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM