C 类静态结构成员定义

C++ class static struct member definition

本文关键字:成员 定义 结构 静态      更新时间:2023-10-16

我尚未找到一种在构造函数中成功初始化类成员的方法,我无法弄清楚为什么。

我有一个标题文件:

#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类型(例如intboolchar),则可以直接在标题文件中的类声明中声明并初始化成员变量。