2

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

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|

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

4

2 回答 2

5

您只能在initialization list. 因此,如果SDL_Rect没有constructor接受x, y, w, h,则必须在构造函数的主体中进行。

于 2009-09-26T04:28:58.343 回答
3

当 St 不在您的控制范围内时,以下内容很有用,因此您无法编写正确的构造函数。

struct St
{
    int x;
    int y;
};

const St init = {1, 2};

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

    St s;
};
于 2011-03-19T04:18:30.663 回答