代码之家  ›  专栏  ›  技术社区  ›  Pod

具有数据成员结构的构造函数初始化列表的C++语法?[复制品]

c++
  •  1
  • Pod  · 技术社区  · 15 年前

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

    编辑: 我最后输入了标题,它给了我一个相关问题的LSIT,就像通常那样。在这个列表的底部是完全相同的问题。(使用完全相同的代码;)。 Member initialization of a data structure's members

    阿拉克完全回答了。看来我需要投票来结束我自己的问题?

    你好,

    我有一门课看起来像这样:

    class Button
    {
        private:
            SDL_Rect box;
        public:
            Button(int x, int y, int w, int h);
    }
    

    盒子在哪 these SDL的人。与gcc一起运行-weffc++,只是因为我想知道警告是什么样子,所以抱怨初始化器列表,

    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;
    }
    

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Kornel Kisielewicz    15 年前

    我看到你找到了你的解决方案,但是请注意,你也可以通过为sdl矩形甚至是全局函数编写一个类包装器来逃脱惩罚。 SDL_rect createRect( int x, int y, int w, int h )