oll*_*llo 5 c++ oop initialization class allegro
在头文件中初始化我收到以下错误:
invalid in-class initialization of static data member of non-integral type 'bool [8]'
Run Code Online (Sandbox Code Playgroud)
如果我尝试在.cpp中初始化,我得到:
'bool Ion::KeyboardInput::key [8]' is a static data member; it can only be initialized at its definition
Run Code Online (Sandbox Code Playgroud)
继承人标题:
enum MYKEYS {
KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_W, KEY_S, KEY_A, KEY_D
};
class KeyboardInput
{
public:
KeyboardInput();
~KeyboardInput();
static void getKeysDown(ALLEGRO_EVENT ev);
static void getKeysUp(ALLEGRO_EVENT ev);
static bool getKey(int keyChoice);
private:
static bool key[8] = {false, false, false, false, false, false, false, false};
};
Run Code Online (Sandbox Code Playgroud)
第一条错误信息通知您在头文件中初始化静态成员变量是不正确的。第二条错误消息暗示您尝试key在构造函数中初始化静态成员。
静态类成员变量需要在类内部声明(无需初始化),然后在类外部的.cpp文件中定义(有点像全局变量,除了变量名包含类名)。
bool KeyboardInput::key[8];
Run Code Online (Sandbox Code Playgroud)
变量的定义可以包括初始化程序。由于您将其初始化为全部 false,因此.cpp文件中的上述定义就足够了。
静态类成员变量与全局变量没有太大区别,除了它由类名限定范围,并且可以被保护为只能由类的成员(with private)、类的直接子类(with protected)或班上的朋友。
您必须在 .h 文件中声明静态并在 .cpp 文件中为其分配值。像这样的东西,
class KeyBoardInput{
public:
KeyboardInput();
....
private:
static bool key[8];
};
Run Code Online (Sandbox Code Playgroud)
\#include<"_header.h">
bool KeyBoardInput::key[8] = {false, false, false, false, false, false, false, false};
Run Code Online (Sandbox Code Playgroud)
除了在 cpp 文件中,你不能在任何地方初始化静态变量......它不属于特定对象......所以你必须在类之外(在 cpp 文件中)进行初始化,以便所有对象都可以共享它。