C ++类静态结构成员定义

时间:2017-09-07 04:03:30

标签: c++

我还没有找到在构造函数中成功初始化类成员的方法,我无法弄清楚原因。

我有一个头文件:

#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;

2 个答案:

答案 0 :(得分:3)

当您将成员声明为static时,它将属于只有一个实例的class,而不属于class的对象,因此您无法在构造函数中初始化它。构造函数是一个特殊的成员函数,主要用于初始化新对象的非static成员。

请注意static成员由class的所有对象共享,当对象更改它时,可以从同一class的所有其他对象中看到更改。如果这是你想要达到的目标,那么你展示的方法就是好的。

答案 1 :(得分:0)

静态成员变量与类的每个对象都没有关联。它由所有对象共享。

如果在类中声明了一个静态变量,那么你应该在cpp文件中定义它,否则你可能会得到错误undefined reference

注意,如果静态成员变量是const int类型(例如intboolchar),那么您可以直接在类声明中声明和初始化成员变量在头文件中。