1

私はこの割り当てと戦っています:)

OceanとGridの2つのクラスがあります。

海の中のグリッドのオブジェクトを宣言すると、次のようになります。

unsigned int sharkCount;
Grid grid;

コンパイラ/不平は言う:

error C2146: syntax error : missing ';' before identifier 'grid'


私が提供した限られた情報で、このエラーの原因を予測できますか?

OceanがGridクラスを好まないようです。これは、グリッドクラスの実装が不十分なためである可能性があります。ところで、グリッドにはデフォルトのコンストラクターがあります。

それでも、コンパイル時にエラーが発生します!。

編集:それらはそれぞれ別々のヘッダーファイルにあり、Ocean.hにGrid.hをインクルードしました。

4

3 に答える 3

2

私の最初の推測では、でGrid使用しようとした時点では、の定義は表示されませんOcean。通常、これは、それぞれが独自のファイルにあり、ヘッダーを使用してそれぞれが他のファイルに「表示」されることを許可していない場合に発生します。

于 2010-05-22T06:23:46.040 に答える
2

ソースの残りの部分が必要ですが、いくつかの可能な答えがあります。

  • グリッドはマクロ(#define)を介して何かによって過負荷になっています
  • グリッドクラス定義は含まれていません。
于 2010-05-22T06:26:05.397 に答える
1

グリッドを他のクラスで使用するには、グリッドのヘッダーをヘッダーに含めるか、クラスの前方宣言を実行してクラス内のポインターとして宣言してから、.cppファイルでインスタンス化する必要があります。

class Grid;

class Ocean {
   Grid* grid;
};

またはできれば:

class Ocean {
    boost::shared_ptr<Grid> grid;
};
于 2010-05-22T06:28:26.480 に答える