0

物事が大きくなりすぎる前に構文の問題を見つけようとするために、不完全なプログラムをコンパイルしようとしています。そうは言っても、私が作成したクラスはほとんど完全であり(いくつかのメンバー関数はスタブ化されています)、メインプログラムとは別のファイルに含まれています。Visual Studioは、それらをクラスとして認識します(それらにマウスを合わせると表示されます)。

さて、問題は、これをコンパイルしようとすると、次のエラーが発生することです。

1>d:\my programs\powerplay\powerplay\powerplay.hpp(99): error C2065: 'pp_player' : undeclared identifier
1>d:\my programs\powerplay\powerplay\powerplay.hpp(99): error C2146: syntax error : missing ')' before identifier 'player'
1>d:\my programs\powerplay\powerplay\powerplay.hpp(99): error C2182: 'resolve_current_space' : illegal use of type 'void'

このファイルの99行目は関数宣言です(ここで、pp_playerは私のクラスの大きい方であり、前述のように、エディターではVSによってクラスとして認識されます)。

void resolve_current_space (pp_player& player);

すべてが適切に#include'dであり、他のクラスに問題はありません。この関数(宣言と定義)をコメントアウトしようとしましたが、コンパイラーは、このクラスのオブジェクトを引数として使用しようとする次の関数をチョークします。このクラスのオブジェクトをファイルの前半でインスタンス化しようとしましたが、まったく同じエラーは発生しませんでしたが、多かれ少なかれ同じ結果になりました。

誰もがこれが何であるかについての考えを持っていますか?上記が十分でない場合は、必要に応じて、ソース全体を利用できるようにすることができます。

4

1 に答える 1

2

それを使用しようとしている時点でスコープ内の宣言はありませpp_playerん。単純明快です。それがそのエラーメッセージの意味です。

したがって、すべてが適切に含まれているというあなたの主張にもかかわらず、そうではないか、含まれているものがpp_playerその時点より前に宣言または定義されていません。

C および C++ では、ほとんどのもの (ラベルなど、これを必要としないエッジ ケースがいくつかあります) を使用する前に宣言する必要があるというのが基本的な信条です。

ファイルの 99 行目より前にタイプを定義してください。hpp

于 2013-01-02T04:01:48.580 に答える