如何在代码块中关闭标记为[默认启用]的编译器警告

时间:2014-07-17 22:13:21

标签: c++ c++11 g++ codeblocks

我试图在一个类中使用常量,这在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();
}

2 个答案:

答案 0 :(得分:2)

编译器警告告诉您具体操作:

  

警告:非静态数据成员初始化程序仅适用于 -std = c ++ 11或-std = gnu ++ 11 [默认启用]

默认情况下,g ++使用C ++ 03 要激活C ++ 11功能,您需要告诉编译器使用C ++ 11

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

使用C ++ 11后,将启用该语言的默认功能(&#34;默认启用&#34;)。

答案 1 :(得分:1)

编译器告诉你它应该是静态的:

warning: non-static data member ...

因此,如果您要添加静态关键字,它将解决您的问题。

所以改变这些:

const int buttonDim = 100;

使用:

static const int buttonDim = 100;

并且应该发出警告。

请注意,很长一段时间内它都是C ++的一部分(只有cl [Microsoft编译器]在2008年之前才支持它。)


作为旁注,一位优秀的程序员想要做相反的事情:将所有警告转换为错误,以强制修复所有警告。我很少需要绕过一个警告,它总是相当前卫的情况(比如用==!=比较两个浮点数。所以,所有这些都说,我实际上会建议你使用{ {1}}并始终找到警告的确切原因。

当然,如果你正在与其他代码合作......这是一个不同的故事。他们可能不想修复他们的代码。