C+#包括警卫

C+#包括警卫

我是C+新手,但我在C#和Java方面有一些编程经验,所以我可能缺少一些C+特有的基本知识。

问题是我不知道出了什么问题,我会粘贴一些代码来解释这个问题。

我有三门课,GameEvents,物理学和GameObject。我有他们每一个的标题。GameEvents有一个物理和一个游戏对象列表。物理学有一个游戏对象列表。

我想要实现的是,我希望GameObject能够访问或拥有一个物理对象。

如果我简单地将“Physics.h”包含在GameObject中,我就会得到我理解的“错误C 2111:‘ClassXXX’:‘class’type refinition”。这就是我认为#包括-后卫会有帮助的地方,所以我给我的物理防护增加了一个包括后卫。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中包含“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();};

我有很多问题不明白他们为什么会出现。如果我不包括“Physics.h”,我的代码运行得很好。

我非常感谢你的帮助。


一只萌萌小番薯
浏览 344回答 3
3回答

慕森卡

这里有循环引用:Physics.h包括GameObject.h包括Physics.h..你们班Physics使用GameObject*(指针)类型,因此不需要包括GameObject.h在……里面Physics.h但只需使用前向声明-而不是#include&nbsp;"GameObject.h"放class&nbsp;GameObject;此外,在每个头文件中放置保护。
打开App,查看更多内容
随时随地看视频慕课网APP