こんにちは私のプログラムでは、 "invader.h"と "game.h"という名前の2つのヘッダファイルをgame.hに持っています。私はinvader.hをインクルードインスタンスに渡すためにポインタを渡したいからです。私はまた、invader.hのgame.hを含めるが、私はerror.ifをコンパイルした私はinvader.hからgame.hを削除してうまく動作します。私はすでに各ヘッダファイルにインクルードガードを追加しています。私が今まで見つけたものに基づいて、invader.hのゲームクラスの前方宣言を追加します。なぜなら、invader.hのゲームインスタンスへのポインタが必要なのですが、invader.cppのゲーム関数を呼び出すときに、それは不完全なクラス型へのポインタが許可されていないと言います。この問題を解決するにはどうすればよいですか?ヘッダーファイルの重複を避けるにはどうすればよいですか?
Game.h
#ifndef GAME_H
#define GAME_H
#include "Tank.h"
#include "Invader.h"
#include "Block.h"
#include "Bullet.h"
class Game
{
private:
Tank tank;
Invader invaders[11][5];
Block blocks[4];
bool logicRequiredThisLoop = false;
public:
Game();
void initEntities();
Tank* getTank(){return &tank;};
Invader* getInvaders(){return &invaders[0][0];};
Block* getBlocks(){return &blocks[0];};
void updateLogic();
};
#endif
Invader.h
#ifndef INVADER_H
#define INVADER_H
#include "Entity.h"
class Game; //forward declaration of class Game
class Invader: public Entity
{
private:
Game* game;
public:
Invader(){};
Invader(Game*,char*,int,int,int,int,int,int);
void move(long delta);
void doLogic();
};
#endif
Invader.cpp
Invader.cppで私がメンバーとなっている)updateLogicを(呼び出そうGameクラスの関数では、不完全なクラスへのポインタが許可されていないというエラーが発生します。
実際に私がここで知りたい最も基本的なことは、私のコードでGameクラスにはinvader型のメンバ変数があるので、invaderクラスのGameクラスのメンバ関数をどのように呼び出すことができますか? Invader.hをGame.hにインクルードし、Invader.hにGameh.hをインクルードします。コンパイルエラーが発生します。
1>ClCompile:
1> Invader.cpp
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(13): error C2146: syntax error : missing ';' before identifier 'invaders'
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(21): error C2143: syntax error : missing ';' before '*'
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(21): warning C4183: 'getInvaders': missing return type; assumed to be a member function returning 'int'
1>c:\users\tony\documents\info3220\spaceinvader\spaceinvader\basicwogl\game.h(21): error C2065: 'invaders' : undeclared identifier
私たちのコードを表示します。 –
@CarlNorum私はソースコード – Tony
を投稿しました@JoachimPileborg:彼はすでに* "それは不完全なクラスタイプへのポインタは許可されていません" * –