C++ #include gardes

RÉSOLU

Ce qui m'a vraiment aidé est que je pouvais #inclure les en-têtes de dans le .fichier cpp avec provoquant la redéfinition d'erreur.


Je suis novice en C++, mais j'ai une certaine expérience de la programmation en C# et en Java, donc j'ai peut être raté quelque chose de base qui est unique à C++.

Le problème est que je ne sais pas vraiment quel est le problème, je vais coller un peu de code pour essayer d'expliquer le problème.

J'ai trois Classes, GameEvents, de la Physique et de la GameObject. J'ai les en-têtes pour chacun d'eux.
GameEvents a un Physique et une liste des GameObjects.
La physique a une liste des GameObjects.

Ce que je suis en train de réaliser, c'est que je veux GameObject pour être en mesure d'accéder ou de posséder un objet Physique.

Si j'ai simplement #include "de la Physique.h" dans GameObject-je obtenir les
"erreur C2111: 'ClassXXX' : 'class' type de redéfinition" que je comprends.
Et c'est là que j'ai pensé #include-gardes de l'aide j'ai donc ajouté un include de la garde à mon Physique.h puisque c'est l'en-tête, je veux inclure deux fois.

C'est à quoi il ressemble

#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

Mais si j' #include "de la Physique.h" dans mon GameObject.h maintenant comme ceci:

#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();
};

Je obtenir plusieurs questions qui ne comprennent pas pourquoi ils sont en train d'apparaître.
Si je n'ai pas #include "de la Physique.h" mon code fonctionne très bien.

Je suis très reconnaissant pour toute aide.

InformationsquelleAutor Orujimaru | 2011-11-05