编辑: 我在最后输入了标题,它给了我一些相关的问题,就像通常那样。在这个列表的底部是完全相同的问题。 (使用完全相同的代码;))。 Member initialization of a data structure's members
AraK完全回答了这个问题。看来我需要投票才能结束我自己的问题?
您好,
我有一个看起来像这样的课程:
class Button
{
private:
SDL_Rect box;
public:
Button(int x, int y, int w, int h);
}
box是来自SDL的these人之一。使用-Weffc ++与GCC一起运行,只是因为我想知道警告会是什么样的,抱怨初始化列表,
file.cpp||In constructor 'Button::Button(int, int, int, int)':|
file.cpp|168|error: 'Button::box' should be initialized in the member initialization list|
我想安抚它。我无法弄清楚愚蠢的语法。我试过了
Button::Button(int x, int y, int w, int h ) :
box(0,0,0,0)
但这只会导致
file.cpp||In constructor 'Button::Button(int, int, int, int)':|
file.cpp|171|error: expected identifier before '{' token|
file.cpp|171|error: member initializer expression list treated as compound expression|
file.cpp|171|error: left-hand operand of comma has no effect|
file.cpp|171|error: right-hand operand of comma has no effect|
file.cpp|171|error: right-hand operand of comma has no effect|
file.cpp|171|error: no matching function for call to 'SDL_Rect::SDL_Rect(int)'|
c:\programming\mingw-4.4.0\bin\..\lib\gcc\mingw32\4.4.0\..\..\..\..\include\SDL\SDL_video.h|50|note: candidates are: SDL_Rect::SDL_Rect(const SDL_Rect&)|
c:\programming\mingw-4.4.0\bin\..\lib\gcc\mingw32\4.4.0\..\..\..\..\include\SDL\SDL_video.h|50|note: SDL_Rect::SDL_Rect()|
我尝试了box = blah
或box.x = blah
或box.x(blah)
,但他们失败了。
我还尝试了box({0,0,0,0})
和box{0,0,0,0}
,
file.cpp|169|error: extended initializer lists only available with -std=c++0x or -std=gnu++0x|
file.cpp|171|error: expected identifier before '{' token|
我真的不想对c ++ 0x进行编译。特别是因为我希望这是跨平台的,我不认为很多东西支持c ++ 0x。
最后我设法逃脱:
Button::Button(int x, int y, int w, int h ) :
box()
{
box.x = x;
box.y = y;
box.w = w;
box.h = h;
}
这对我来说似乎毫无意义。这是“正确”的方法吗?这不是没有初始化列表的那个吗?
答案 0 :(得分:2)
我看到你找到了你的解决方案,但请注意你也可以为SDL_rect写一个类包装器,甚至是全局函数SDL_rect createRect( int x, int y, int w, int h )