6

ヘッダー ファイルで初期化すると、次のエラーが発生します。

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};
};
4

3 に答える 3

6

最初のエラー メッセージは、ヘッダー ファイルの静的メンバー変数を初期化するのが不適切であることを通知します。key2 番目のエラー メッセージは、コンストラクターで静的メンバーを初期化しようとしたことを意味します。

静的クラス メンバー変数は、クラス内で (初期化せずに) 宣言し、ファイル内のクラス外で定義する必要があり.cppます (変数名にクラス名が含まれていることを除いて、グローバル変数のようなものです)。

bool KeyboardInput::key[8];

変数の定義には、初期化子が含まれる場合があります。すべて false に初期化していたので、.cppファイル内の上記の定義で十分です。

静的クラス メンバー変数は、クラス名によってスコープが設定され、クラスのメンバー ( を使用private)、クラスの直下のサブクラス ( を使用protected)、またはクラスの友達。

于 2012-06-18T23:24:55.557 に答える
6

.h ファイルで静的を宣言し、.cpp ファイルでそれに値を割り当てる必要があります。このようなもの、

_header.h

class KeyBoardInput{

public:
   KeyboardInput();
   ....
private:
   static bool key[8];
};

_header.cpp

\#include<"_header.h">

bool KeyBoardInput::key[8] = {false, false, false, false, false, false, false, false};

cppファイル以外では、静的変数をどこでも初期化できません...それは特定のオブジェクトに属していません..したがって、すべてのオブジェクトが共有できるように、クラスの外側(cppファイル内)で初期化する必要があります。

于 2012-06-18T23:26:19.453 に答える