Objekt in Objekt



  • Hallo,

    habe folgendes Problem:

    Ich habe 2 Klassen (a und b).
    In Klasse b deklariere ich ein Objekt a (a a_obj)
    und eine Methode. In der Klasse a gibt es auch eine Methode.
    Nun rufe ich die Methode aus Klasse b auf. In dieser
    Methode soll die Methode a_obj.method(b obj) aufgerufen werden.
    D.h. also, ich will das Objekt übergeben.

    Der Quellcode:

    class b  
    {
    public:
        a obj_a;
        void b_method();
        b();
        virtual ~b();
    };
    
    class a  
    {
    public:
        void a_method(b* obj);
        a();
        virtual ~a();
    
    };
    
    void b::b_method()
    {
        obj_a.a_method(this);
    }
    

    Warum bekomme ich einen Compiler-Fehler in der Klasse a ?
    Wie kann ich ihn beheben ?
    Wie kann ich mein Objekt b an die Methode übergeben ?

    Viele Dank

    [ Dieser Beitrag wurde am 22.04.2003 um 10:21 Uhr von Haaf DeLuxe editiert. ]



  • Schau mal bitte ob Dir folgender Beitrag hilft:

    http//www.c-plusplus.net/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=15&t=008699

    bzw hier genauer:

    fehler bei querverweis #include".." von header datei

    [ Dieser Beitrag wurde am 22.04.2003 um 10:28 Uhr von Knuddlbaer editiert. ]



  • Hi,

    danke für die schnelle Antwort,
    aber damit komme ich nicht zurecht.
    Kann es mir jemand evtl. ganz einfach erklären ?

    Gruß und Danke



  • hi,
    es ist nur eine frage der anordnung:
    du benutzt in b eine instanz von a, a ist dem compiler zu dem zeitpunkt aber noch nicht bekannt.
    in a benutzt du nur einen zeiger auf ein b objekt.
    also gibst du einfach a vor b, und ganz vorne noch eine vorwärtsdeklaration für b, weil a ja einen zeiger auf b benutzt

    class b; //vorwärts
    
    class a  
    {
    public:
        void a_method(b* obj); //hier kann man jetzt einen b* verwenden
        a();
        virtual ~a();
    };
    
    class b  
    {
    public:
        a obj_a; //hier kannst du jetzt ein objekt anlegen
        void b_method();
        b();
        virtual ~b();
    };
    
    //der rest ist egal
    void b::b_method()
    {
        obj_a.a_method(this);
    }
    

    alternativ kannst du statt einer instanz von a in b in b einen zeiger auf a halten. dann musst du a vorwärtsdeklarieren.



  • btw: von den FAQs: #include


Anmelden zum Antworten