bekannte elemente der einen in der anderen klasse



  • Hallo

    es geht darum

    ich habe klasse A diese hat members und methoden, in einer methode ruf ich eine methode von klasse B auf, und klasse B soll nun zugriff auf die members von klasse A haben,
    ich weiss nicht wie ich das realisieren soll

    A.h

    #include "B.h"
    
    class A{
    private:
        B b;
        int i=0;
    
        void DoSomething();
    };
    

    A.cpp

    void A::DoSomething(){
        b.doSo();
    }
    

    B.h

    class B{
    public:
        void doSo();
    };
    

    B.cpp

    void B.doSo(){
        int j = i;
    }
    

    ich hab schon versucht einen pointer der klasse A zu uebergeben, aber ich kann in klasse B der methode keine attribute dieser art angeben.

    irgendwie steh ich da auf den schlauch



  • Die schnellste Möglichkeit wäre natürlich, B zum friend von A zu machen. Allerdings solltest du dich fragen, ob B überhaupt auf die privaten Member von A zugreifen muss oder ob man das irgendwie vermeiden kann.



  • er muss definitiv zugreifen laesst sich nicht vermeiden

    das mit friend dachte ich auch so - aber in der B klasse ist klasse A die ganze zeit unbekannt - demzufolge kann ich da auf nichts zugreifen

    B ist ja eine unterklasse von A
    in der B.h kann ich ja nichtmal den header von klasse A inkludieren - wuerde sich logischerweise im kreis drehen daher nur fehler



  • A ist nicht unbekannt (wenn doch, brauchst du eventuell Forward Deklarationen, um die Klassen wechselseitig bekannt zu machen ;)). Aber B muß wissen, auf welches A-Objekt es zugreifen soll.



  • forward declaration geht nicht, da ich die haeder von klasse A nicht in B includieren kann

    ich habe es eben mit einer kleinen solution getestet, da geht es mit dem includieren

    das problem ist, in meiner app brauch ich #pragma once in der header von klasse a
    wenn ich nu fuer klasse B die header von A includieren will - kennt er die klasse trotzdem nicht



  • Forward-Deklaration kannst du verwenden, anstatt den Header einzubinden:

    //A.h
    #include "B.h"
    
    class A
    {
    public:
      B val;//das braucht die komplette Definition
      int i;
      void do_something();
    };
    
    //A.cpp
    #inlcude "A.h"
    void A::do_something()
    { val.do_it(*this); }
    
    //B.h
    class A;//Forward-Deklaration reicht
    
    class B
    {
    public:
      void do_it(A& who);//B::do_it() muß wissen, wessen Werte es ändern soll ;)
    };
    
    //B.cpp
    #include "B.h"
    #include "A.h"
    void B::do_it(A& who)
    { who.i=4711; }
    


  • aaaaaah - genau das brauchte ich - dankeschoen {= das rettet mich {=


Anmelden zum Antworten