我试图在一个类中使用常量,这在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 :(得分: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}}并始终找到警告的确切原因。
当然,如果你正在与其他代码合作......这是一个不同的故事。他们可能不想修复他们的代码。