在头文件中初始化我收到以下错误:
invalid in-class initialization of static data member of non-integral type 'bool [8]'
如果我尝试在.cpp中初始化,我得到:
'bool Ion::KeyboardInput::key [8]' is a static data member; it can only be initialized at its definition
下面是标题:
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};
};
答案 0 :(得分:4)
第一条错误消息通知您在头文件中初始化静态成员变量是不合适的。第二条错误消息暗示您尝试在构造函数中初始化静态成员key
。
需要在类中声明一个静态类成员变量(没有初始化),然后在.cpp
文件中的类之外定义(类似于全局变量,除了变量名具有类名)包括在内。)
bool KeyboardInput::key[8];
变量的定义可能包括初始化程序。由于您将其初始化为全误,因此.cpp
文件中的上述定义已足够。
静态类成员变量与全局变量没有太大区别,除了它由类名作为范围,并且可以受到保护,只能由类的成员(private
)访问, class的直接子类(带protected
)或类的朋友。
答案 1 :(得分:4)
您必须在.h文件中声明静态,并在.cpp文件中为其指定值。像这样的东西,
class KeyBoardInput{
public:
KeyboardInput();
....
private:
static bool key[8];
};
\#include<"_header.h">
bool KeyBoardInput::key[8] = {false, false, false, false, false, false, false, false};
除了在cpp文件中你不能在任何地方初始化静态变量...它不属于特定的对象..所以你必须在类外部初始化(在cpp文件中),以便所有对象都可以共享它
答案 2 :(得分:0)
试试这个:
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];
};
bool KeyboardInput::key = {false, false, false, false, false, false, false, false};
最后一行应该放在.cpp文件中,因为所有“代码”都应放在cpp文件中。