C ++ #include guards

РЕШЕНИЕ

Что действительно помогло мне, так это то, что я мог # включать заголовки в файл .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", мой код будет работать нормально.

Я очень благодарен за любую помощь.

39
задан Shahbaz 10 August 2012 в 20:38
поделиться