c++ - 在代码块中,C++ 如何关闭标记为 [enabled by default]的编译器警告

  显示原文与译文双语对照的内容

我在试图在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();


}



时间: 原作者:

编译器告诉你它应该是 static:


warning: non-static data member.. .



所以如果你加入 static 关键字就能解决你的问题。

所以改变一下:


const int buttonDim = 100;



使用:


static const int buttonDim = 100;



警告应该是。

注意,这是 C++的一部分时间( 只有在 2008年之前,[Microsoft compiler] 才不支持它) 。

注意,优秀的程序员希望做相反的事情: 将所有警告转换为要强制修复所有警告的错误。 我很少需要一个警告,它总是比较前端的情况( 比如比较两个浮点数的== 或者 != ) 。 所以,所以我要建议你使用 -Werror,并总是找到一个警告的确切原因。

当然,如果你正在处理别人的代码。 那是个不同的故事他们可以能不想修复他们的代码。

原作者:
...