Problem mit Klassen



  • Hi,

    ich steh vor einem Problem, ich habe eine Klasse X und eine Klasse Y, Klasse X braucht aber etwas von Klasse Y und Klasse Y braucht etwas von Klasse X.

    Nun hier mal bischen Psoidocode:

    class X
    {
    public:
        void    funktion_von_X (void);
    
    private:
        Y       m_Y;
    };
    
    class Y
    {
    public:
        void    funktion_von_Y (void);
    
    private:
        X       m_X;
    };
    

    Wie macht man das?!?!?!?! also ich bekomm immer errors 😕 😞



  • geht garnicht



  • Scheisse 😞



  • nur mit zeiger

    private:
        Y*       m_Y;
    
    private:
        X*       m_X;
    

    aber solch eine situation sollte garnicht vorkommen dürfen. 😃
    vielleicht kannst du es ja umdesignen?



  • du implementierst eine 'hat-ein' beziehung.

    gib mal n beispiel aus der realen welt wo es das gibt, dass A ein B hat und B ein A hat -> das ist doch ne endlosschleife. (denn jedes B hat wieder ein A welches ja ein B hat und dieses hat ein A worin ein B zufinden welches ein A...)



  • Hi.
    Vermutlich hat <DerCoder> ein anderes Problem:
    die Klasse X kennt die Klasse Y noch nicht.

    schreib einfach drüber:

    class X;
    class Y;
    

    bja



  • nö, das hilft nichts. das geht einfach nicht was er da machen will.



  • recht du hast



  • 🙂



  • class X.h:
    ------------------------------------------
    class Y;
    class X
    {
    public:
        void    funktion_von_X (void);
        void    set_Y(Y * y);
    
    private:
        Y  *     m_Y;
    };
    
    class Y.h:
    ----------------------------------
    class Y
    {
    public:
        void    funktion_von_Y (void);
        void    set_X(X * x);
    private:
        X *       m_X;
    };
    
    class X.cpp:
    ------------------------------------
    #include "y.h"
    void    X::set_Y(Y * y)
    {
        m_Y = y;
    }
    
    class Y.cpp:
    ------------------------------------
    #include "x.h"
    
    void    Y::set_X(X * x)
    {
        m_X = x;
    }
    
    ---------------------------------------------
    int main(int argc, char* argv[])
    {
        X x;
        Y y;
        x.set_Y(&y);
        y.set_X(&x);
    
    }
    

    Über die Notwendigkeit kann man ohne hintergrund jedoch nichts sagen.



  • Ergänzung zu Shade's Post:
    Du willst wahrscheinlich eine "wird verwendet" Beziehung. Das geht aber nur durch Zeiger. Bsp:
    AUTO hat einen MOTOR, der MOTOR wird aber vom gleichen AUTO verwendet und nicht von einem neuen!


Log in to reply