解决了
真正帮助我的是我可以#include .cpp 文件中的标头而不会导致重新定义的错误。
我是 C++ 新手,但我在 C# 和 Java 方面有一些编程经验,所以我可能会遗漏一些 C++ 独有的基本知识。
问题是我真的不知道出了什么问题,我将粘贴一些代码来尝试解释问题。
我有三个类,GameEvents、Physics 和 GameObject。我有他们每个人的标题。GameEvents 有一个 Physics 和一个 GameObjects 列表。物理学有一个游戏对象列表。
我想要实现的是我希望 GameObject 能够访问或拥有一个物理对象。
如果我只是在 GameObject 中 #include "Physics.h",我会得到我理解的“错误 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
但是如果我现在在我的 GameObject.h 中 #include "Physics.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();
};
我遇到了多个不明白为什么会出现的问题。如果我不#include "Physics.h" 我的代码运行得很好。
我非常感谢任何帮助。