0

私はしばらくの間、C++ でゲームを開発するために allegro 5 ライブラリを使用してきました。今日、奇妙なエラーが発生しました:

というクラスがありlevelます。というヘッダーファイルがありますlevelhandler。外観は次のとおりです。

#pragma once
#include "level.h"

level level_1;

level *currentlevel;

void initialize_levels()
{

   currentlevel = &level_1;

}

コンパイルしようとすると、次のような奇妙なエラーが発生します。

error C2086: 'int level' redefinition
error C2143: syntax error : missing ; before 'level_1'

以前はコンパイルできたことを覚えており、何度も使用currentlevel->Player.Xしましたが、今ではそれがたくさんあり、次のようなエラーが発生します。

error C2227: left of '->Player' must point to a class/struct/generic type
error C4430: missing type specifier - int assumed

コメントからヘッダーを貼り付けました

#pragma once
#include "entity.h"
// some more includes
class level {
public:
    enum Tileset { ... };
    enum Tile { ... };
    int tiles[200][200];
    player Player;
    level(void);
    ~level(void);
};
4

2 に答える 2

0

さて、私は週末に自分のプロジェクトをいじくり回していましたが、奇妙なコンパイラ エラーが多発する原因が何であるかをついに突き止めました。2 つのヘッダー ファイルが互いにインクルードされているケースが多かったようで、コンパイラがそれを本当に気に入らなかったので、それを修正したところ、問題はなくなりました。私を助けてくれてありがとう、そして素晴らしい一日を!

于 2013-05-27T18:36:36.023 に答える
0

このようなエラーは、[エラー リスト] ペインを見ている限り、見つけるのは困難です。「出力」ビューを表示するには、「表示/出力」を選択します。エラー C2086 の後の行は、レベルの元の定義を示しています。

あなたは見つけるを埋める

int level;

C2086があなたに言うようにそこにあります。ラインだと

level level_1;

最初の例では、コンパイル単位に含まれる最後のヘッダー ファイルを確認する必要があります。で終わるintか、不均衡な#if句が含まれている可能性があります。

正確な場所を見つけるには、Short, Self Contained, Correct (Compilable), Exampleを使用して開始します。これは、バグを見つけるのに役立ち、水晶玉で他の人の時間を節約します。

編集:

この予期しない動作の理由を見つけるもう 1 つの方法は、プリプロセッサの出力を確認することです。Generate Preprocessed Fileオプション int を C/C++/Preprocessor プロジェクト プロパティ ページに設定With line numbers (/P)し、生成された<sourcefile>.i

その level.h ファイルに意図したものが含まれていることを確認してください。

于 2013-05-24T16:19:56.330 に答える