我遇到了一个容易解决的尴尬问题,但不是我喜欢做的事情。在我的类的构造函数中,我正在初始化数据成员的数据成员。这是一些代码:
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|
以这种方式初始化成员是否存在问题,是否需要切换到构造函数体内的赋值?
答案 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;
};