C 类静态结构成员定义
C++ class static struct member definition
我尚未找到一种在构造函数中成功初始化类成员的方法,我无法弄清楚为什么。
我有一个标题文件:
#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() {
}
现在解决这个问题。此设置似乎可以工作。但是,我习惯于在构造函数中初始化成员,但我还没有找到与此静态结构成员一起做到这一点的方法。
以下方法不起作用,有人可以解释为什么吗?
state_mouse.moving = false;
当您将成员声明为 static
时,它将仅使用一个实例属于 class
,而不是 class
的对象,因此您不能在构造函数中初始化它。构造函数是一个特殊的成员函数,主要存在以初始化新对象的非static
成员。
请注意,static
成员均由class
的所有对象共享,当对象更改它时,可以从同一class
的所有其他对象中看到更改。如果您想实现的目标,那么您显示的方法很好。
静态成员变量与类的每个对象没有关联。它由所有对象共享。
如果您在类内部声明静态变量,则应在CPP文件中定义它,否则,您可以获得错误undefined reference
。
请注意,如果静态成员变量为const int类型(例如int
,bool
,char
),则可以直接在标题文件中的类声明中声明并初始化成员变量。
相关文章:
- 类模板静态数据成员定义/声明/初始化
- 默认移动成员定义为已删除,而未定义特殊成员?
- 条件C++类成员定义
- 将类类型成员定义为公共和私有之间有什么区别?
- 有没有办法为静态对象成员定义一个符合开关标准的常量?
- C 不能将带有父类指针作为类型的静态模板成员定义引用
- 如何在 .cpp 文件中为私有类成员定义 friend 运算符<<而不是在标头中
- 为类模板的单个成员定义专用化
- 使用命名空间进行函数成员定义
- C 类静态结构成员定义
- C 替代成员定义
- C++:如何将数据成员定义为 const
- 模板超类的静态成员定义
- 如何为联合成员定义typedef
- 为类模板的枚举成员定义 std::hash
- 在越界成员定义的类型说明符中是否可以省略typename
- 更改成员定义的顺序会破坏内存
- 为什么不允许将类成员定义的' static '关键字放在命名空间范围内?
- 我是否应该在将实现委托给子类的类中包含成员定义?
- 在非限定id后的静态数据成员定义中使用的名称