成员初始化数据结构的成员

时间:2009-09-26 04:22:50

标签: c++ constructor sdl

我遇到了一个容易解决的尴尬问题,但不是我喜欢做的事情。在我的类的构造函数中,我正在初始化数据成员的数据成员。这是一些代码:

class Button {
private:
    // The attributes of the button
    SDL_Rect box;

    // The part of the button sprite sheet that will be shown
    SDL_Rect* clip;

public:
    // Initialize the variables
    explicit Button(const int x, const int y, const int w, const int h)
        : box.x(x), box.y(y), box.w(w), box.h(h), clip(&clips[CLIP_MOUSEOUT]) {}

但是,我收到编译错误:

C:\Users\Alex\C++\LearnSDL\mouseEvents.cpp|56|error: expected `(' before '.' token|

C:\Users\Alex\C++\LearnSDL\mouseEvents.cpp|56|error: expected `{' before '.' token|

以这种方式初始化成员是否存在问题,是否需要切换到构造函数体内的赋值?

2 个答案:

答案 0 :(得分:5)

您只能在initialization list中调用成员变量构造函数。因此,如果SDL_Rect没有接受constructor的{​​{1}},则必须在构造函数的主体中执行此操作。

答案 1 :(得分:3)

当St不在您的控件中时,以下内容非常有用,因此您无法编写正确的构造函数。

struct St
{
    int x;
    int y;
};

const St init = {1, 2};

class C
{
public:
    C() : s(init) {}

    St s;
};