РЕШЕНИЕ
Что действительно помогло мне, так это то, что я мог # включать заголовки в файл .cpp, не вызывая переопределения ошибка.
Я новичок в C ++, но у меня есть некоторый опыт программирования на C # и Java, поэтому мне может не хватать чего-то базового, уникального для C ++.
Проблема в том, что я действительно не знаю, что случилось, я вставлю код, чтобы попытаться объяснить проблему.
У меня есть три класса: GameEvents, Physics и GameObject.У меня есть заголовки для каждого из них. GameEvents имеет одну физику и список GameObjects. Physics имеет список GameObject.
Я пытаюсь достичь того, чтобы GameObject мог иметь доступ к объекту Physics или владеть им.
Если я просто #include "Physics.h" в GameObject, я получу "ошибку C2111: 'ClassXXX': 'class' type redifinition", которую я понимаю. И вот где Я подумал, что # include-guards поможет, поэтому я добавил защиту включения в свой Physics.h, так как это заголовок, который я хочу включить дважды.
Вот как это выглядит
#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
Но если я сейчас #include "Physics.h" в моем GameObject.h вот так:
#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();
};
Я получаю несколько проблем, которые не понимают, почему они появляются. { {1}} Если я не #include "Physics.h", мой код будет работать нормально.
Я очень благодарен за любую помощь.