我还没有找到在构造函数中成功初始化类成员的方法,我无法弄清楚原因。
我有一个头文件:
#pragma once
struct STATE_MOUSE {
bool moving;
int left_button;
int right_button;
int middle_button;
bool scroll_up;
bool scroll_down;
};
class Message {
private:
static STATE_MOUSE state_mouse;
public:
Message();
~Message();
};
然后我有一个源文件:
#include "message.hpp"
STATE_MOUSE Message::state_mouse = {false, 0, 0, 0, false, false};
Message::Message() {
//Would like to initialize state_mouse here somehow.
}
Message::~Message() {
}
现在问题。这个设置似乎有效。但是我习惯于在构造函数中初始化成员,而我还没有找到使用这个静态struct成员的方法。
以下方法不起作用,有人可以解释原因吗?
state_mouse.moving = false;
答案 0 :(得分:3)
当您将成员声明为static
时,它将属于只有一个实例的class
,而不属于class
的对象,因此您无法在构造函数中初始化它。构造函数是一个特殊的成员函数,主要用于初始化新对象的非static
成员。
请注意static
成员由class
的所有对象共享,当对象更改它时,可以从同一class
的所有其他对象中看到更改。如果这是你想要达到的目标,那么你展示的方法就是好的。
答案 1 :(得分:0)
静态成员变量与类的每个对象都没有关联。它由所有对象共享。
如果在类中声明了一个静态变量,那么你应该在cpp文件中定义它,否则你可能会得到错误undefined reference
。
注意,如果静态成员变量是const int类型(例如int
,bool
,char
),那么您可以直接在类声明中声明和初始化成员变量在头文件中。