Klassen - Probleme

Hey HaBo.

Ich hab etwas Probleme mit zwei Klassen
Beide haben Zeiger aufeinander, wobei mir jetzt aber leider die Logik was killt^^.
Da beide ja einen Zeiger haben muss die eine Klasse erst den Aufbau der zweiten wissen.
Das sieht etwa so aus:
Code:
#ifndef PLAYER_H
#define PLAYER_H
#include <SDL.h>
#include "world.h"
class cPlayer{
    private:
        SDL_Surface*     img;
        float            realX;
        float            realY;
        float            xVelocity;
        float            yVelocity;
        float            xVelocityMax;
        float            yVelocityMax;
        bool            inAir;
        cWorld*         world;/**Hier ist die zweite Klasse**/

    public:
        cPlayer(cWorld* world);
        virtual ~cPlayer();
        void draw(SDL_Surface* world, float marginX, float marginY);
        void jump();
        void move();
        void accelerate(bool right);
        void draw(SDL_Surface* screen);
        float getRealX();
        float getRealY();

};
#endif
sowie
Code:
#ifndef WORLD_H
#define WORLD_H
#include <SDL.h>
#include "player.h"
#include "block.h"

class cWorld{
    private:
        cPlayer*    player;//Zeiger auf dem Spieler -> die andere Klasse
        cBlock***    level;
        int            levelX;
        int            levelY;
        float        viewX;
        float         viewY;
    public:
        cWorld();
        cWorld(cBlock*** level, int levelX, int levelY);
        void draw(SDL_Surface* screen);
        void clear();
        virtual ~cWorld();
        cPlayer* getPlayer();
};
#endif
Prob ist halt das beide einander vollständig haben wollen um zu laufen, da ich den Fehler mir so vorstelle:
define player_H
player.h => include world.h
define world_h
include player_h => bereits defined, fail
cWorld hat keine Definition von cPlayer, da die erst nach dem include "world.h" käme.

und andersrum.

Irgendwelche sauberen Vorschläge wie ich das geregelt bekomme?
einen Zeiger auf was anderes und dann Umcasten fände ich nicht so schön und auch blöd wäre es wenn ich auf den cWorld* verzichten müsste..


MfG


EDIT:
Das gibts nicht >.< Google die ganze Zeit schon und kaum poste ichs find ich die Lösung:

#ifndef PLAYER_H
#define PLAYER_H
class cPlayer;//Hier einmal "Voranlegen"
#include <SDL.h>
#include "world.h"

und das selbe nochmal in der world.h - Voila!
 
Zuletzt bearbeitet:
Wenn ich dich richtig verstanden habe liegt dein Problem bei den includes. Das ist nen recht allgemeines Problem für das es eine simple Lösung gibt.

Code:
in includefile "A.h" steht:
class B;

class A
{
B* m_b;
};

in includefile 2 steht:
#include "A.h"

class B
{
A* m_a;
};

Die Dinger nennen sich "forward delclarations" wenn du weiter googlen möchtest.

Um nen Pointer als Member zu haben reicht dem Compiler zu wissen, dass es den Typ gibt. Das sagst du ihm durch das "class B;", definieren kannst du den Typ dann später.
 
Zurück
Oben