2014-07-17 85 views
-1

我想在一個類中使用常量[默認啓用],它應該在C++ 11不錯,但我得到這樣的警告:標記如何關閉編譯器警告代碼塊中

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default] 

的問題是,我得到這麼多(超過10個)次每隔恆定我宣佈。這有效地填充構建消息,並使其他編譯器警告無法找到。 我想使它所以這不再是我構建的消息框出現。

我知道人們喜歡看相關代碼,所以在這裏它是:

class GameState: public State 
{ 
public: 
    const Uint8 * keyStates; 
    Point gameMousePos; 
    int UIType; 
    std::vector<UI *> UIs; 
    Texture * lockingTex; 
    HitBox * inGame; 
    const int buttonDim = 100; 
    const int buttonOffY = 70;//distance from bottom 
    const int buttonOffX = 130;//distance from each other 
    const int buttonTextOffY = 140;//text distance from bottom 
    bool locking; 
    bool noPlaceBool; 
    float gameSpaceScale; 
    HitBox * gameSpace; 
    Texture * bkg; 
    float windowRotSpeed; 
    float inHandRotSpeed; 
    float windowMoveSpeed; 
    GameState(); 
    void handle_events(); 
    void logic(); 
    void render(); 
    void save(); 
    void load_save(); 
} 
+0

可能的重複:http://stackoverflow.com/questions/3378560/how-to-disable-gcc-warnings-for-a-few-lines-of-code – JBentley

+0

替代重複:http://stackoverflow.com/questions/1079997/disable-specific-warnings-in-gcc – JBentley

+0

也許一個愚蠢的問題,但你*是*爲C++ 11編譯配置的,對吧?你有沒有考慮過使用靜態'constexpr'? – WhozCraig

回答

1

編譯器告訴你,這應該是靜態的:

warning: non-static data member ... 

所以,如果你要添加靜態關鍵字,它會解決你的問題。

所以更改這些:

const int buttonDim = 100; 

有了:

static const int buttonDim = 100; 

和警告應該去。

注意,這是C++了很長一段時間的部分(僅限於CL [微軟編譯] 2008年左右纔不支持的很好。)


作爲一個方面說明,一個好的程序員希望做相反的事情:將所有警告轉換爲錯誤,以強制修復所有警告。我很少有四處警示,它始終是相當前衛的情況下(如與==!=比較兩個浮點數。因此,所有這一切說,我真的建議你使用-Werror始終找不到一個確切的原因。警告

當然,如果你與別人的代碼工作......這是一個不同的故事,他們可能不希望解決他們的代碼

2

的編譯器警告會告訴你到底做了什麼:。

警告:僅適用於-s非靜態數據成員初始化TD = C++ 11或-std = GNU ++ 11 [默認啓用]

通過++使用C++ 03默認克。
要激活C++ 11的功能,你需要告訴編譯器使用C++ 11

g++ -std=c++11 stuff.cpp 

一旦你使用的是C++ 11個的默認功能(「默認開啓」),該語言會被啓用。