c ++带有数据成员结构的构造函数初始化列表的语法?

时间:2010-01-02 01:26:29

标签: c++

  

可能重复:
  Member initialization of a data structure’s members

编辑: 我在最后输入了标题,它给了我一些相关的问题,就像通常那样。在这个列表的底部是完全相同的问题。 (使用完全相同的代码;))。 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 = blahbox.x = blahbox.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;
}

这对我来说似乎毫无意义。这是“正确”的方法吗?这不是没有初始化列表的那个吗?

1 个答案:

答案 0 :(得分:2)

我看到你找到了你的解决方案,但请注意你也可以为SDL_rect写一个类包装器,甚至是全局函数SDL_rect createRect( int x, int y, int w, int h )