Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Klassen - Probleme

Diskussion: Klassen - Probleme im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hey HaBo. Ich hab etwas Probleme mit zwei Klassen Beide haben Zeiger aufeinander, wobei mir jetzt aber leider die ...

Antwort
Alt 18.02.11, 17:48   #1 (permalink)
 
Benutzerbild von ChiefWiggum
 
Registriert seit: 09.10.07
ChiefWiggum Leistung: 8086
ChiefWiggum eine Nachricht über ICQ schicken
Likes: 11
Standard Klassen - Probleme

Anzeige

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!
__________________
Be the source always with you.

Geändert von ChiefWiggum (18.02.11 um 17:52 Uhr)
ChiefWiggum ist offline   Mit Zitat antworten
Alt 21.02.11, 23:42   #2 (permalink)
 
Registriert seit: 28.07.08
ArnoNühm Leistung: Z3
Likes: 1
Standard

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.
ArnoNühm ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Klassen - Probleme
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61