1

globals.hを使用して、長方形のベクトルと衝突ボックスおよびいくつかのグローバルブールを格納することを望んでいます

globals.h

extern SDL_Rect winRect;

extern std::vector<SDL_Rect> platform;

extern bool paused;
extern bool exit;

globals.cppで、boolをfalseに設定できます。

bool paused = false;
bool exit = false;

ただし、グローバルwinRect SDL_RectまたはSDL_Rectsのグローバルベクトルを使用しようとすると、コンパイラは「プラットフォームへの未定義の参照」または「winRectへ」を吐き出します。これは、globals.hファイルに設定されており、globals.hがそれらを使用しようとしているクラスヘッダーに含まれているため、理解できません。

globals.cppファイルでvectorとrectに関して他に何かを定義する必要がありますか?

グローバルを操作しようとしているクラスimのヘッダーインクルードの順序に何か問題があるのでしょうか?

これに対する簡単な解決策があることを願っています。

4

2 に答える 2

2

globals.cppでwinRectとプラットフォームを定義する必要があります。

SDL_Rect winRect;

std::vector<SDL_Rect> platform;

bool paused = false;
bool exit = false;

Externは、変数や関数が別の場所で定義されていることをコンパイラーに通知するだけです。定義しないと、リンカーは定義を見つけることができないため、エラーを出します。

于 2011-07-19T13:08:21.547 に答える
0

a)名前空間を使用します。おそらく名前空間の衝突があります。b)SDL_Rectベクトルを定義する前に、タイプが定義されているヘッダーを含める

于 2011-07-19T13:04:03.503 に答える