解決済み
私が本当に助けてくれたのは、再定義されたエラーを発生させることなく、.cppファイルにヘッダーを#includeできることでした。
私はC++を初めて使用しますが、C#とJavaでプログラミングの経験があるため、C++に固有の基本的なものが不足している可能性があります。
問題は、何が問題なのかよくわからないことです。問題を説明するためにコードを貼り付けます。
GameEvents、Physics、GameObjectの3つのクラスがあります。それぞれにヘッダーがあります。GameEventsには、1つの物理学とGameObjectsのリストがあります。PhysicsにはGameObjectsのリストがあります。
私が達成しようとしているのは、GameObjectがPhysicsオブジェクトにアクセスまたは所有できるようにすることです。
GameObjectに単に「Physics.h」を#includeすると、「エラーC2111:'ClassXXX':'class'typeredifinition」が表示されます。そして、これが#include-guardsが役立つと思ったので、Physics.hにインクルードガードを追加しました。これは、2回インクルードしたいヘッダーだからです。
これはそれがどのように見えるかです
#ifndef PHYSICS_H
#define PHYSICS_H
#include "GameObject.h"
#include <list>
class Physics
{
private:
double gravity;
list<GameObject*> objects;
list<GameObject*>::iterator i;
public:
Physics(void);
void ApplyPhysics(GameObject*);
void UpdatePhysics(int);
bool RectangleIntersect(SDL_Rect, SDL_Rect);
Vector2X CheckCollisions(Vector2X, GameObject*);
};
#endif // PHYSICS_H
しかし、GameObject.hに「Physics.h」を#includeすると、次のようになります。
#include "Texture2D.h"
#include "Vector2X.h"
#include <SDL.h>
#include "Physics.h"
class GameObject
{
private:
SDL_Rect collisionBox;
public:
Texture2D texture;
Vector2X position;
double gravityForce;
int weight;
bool isOnGround;
GameObject(void);
GameObject(Texture2D, Vector2X, int);
void UpdateObject(int);
void Draw(SDL_Surface*);
void SetPosition(Vector2X);
SDL_Rect GetCollisionBox();
};
なぜ表示されているのかわからない問題が複数発生します。「Physics.h」を#includeしない場合、コードは正常に実行されます。
助けてくれてとても感謝しています。