Problem bei Reihenfolge



  • Hi

    Mein Code:

    //deklarationen
    class a;
    class b;
    
    //definitionen
    class a
    {
      public:
        void fnc(b daten)
        {
          daten.abc = 1;
        };
    };
    class b
    {
      public:
        int abc;
    };
    

    Dass das nicht geht ist mir klar. Wie kann ich es machen, dass es funktioniert ohne die Klasse b vor der Klasse a zu definieren?



  • X.DarkForce.X schrieb:

    Dass das nicht geht ist mir klar. Wie kann ich es machen, dass es funktioniert ohne die Klasse b vor der Klasse a zu definieren?

    Wozu? b hat keinerlei Abhängigkeit von a.


  • Mod

    Du darfst a::fnc auch gerne nach der Klasse b definieren, obwohl die Klassendefinition vor b steht. Genau genommen ist dies sogar die übliche Methode.



  • SeppJ schrieb:

    Du darfst a::fnc auch gerne nach der Klasse b definieren, obwohl die Klassendefinition vor b steht. Genau genommen ist dies sogar die übliche Methode.

    Bringt nichts, da a::fnc() als Parameter ein b erwartet.



  • Die Frage ist doch, was hat es für einen Sinn, die lokale Kopie von b zu verändern? Schon sind wir wieder bei Referenzen oder const Referenzen und haben kein Problem mehr... Warum sollte man sich hier auf eine Kopie versteifen?


  • Mod

    this->that schrieb:

    Bringt nichts, da a::fnc() als Parameter ein b erwartet.

    Für Parameter reicht eine Forwarddeklaration.

    edit: Oder um mal konkret zu werden:

    class b;
    
    class a
    {
      public:
      void fnc(b daten);
    };
    
    class b
    {
      public:
        int abc;
    }; 
    
    void a::fnc(b daten)
    {
      daten.abc = 1;
    };
    

    Decimad schrieb:

    Die Frage ist doch, was hat es für einen Sinn, die lokale Kopie von b zu verändern? Schon sind wir wieder bei Referenzen oder const Referenzen und haben kein Problem mehr... Warum sollte man sich hier auf eine Kopie versteifen?

    Ich vermute mal, das soll nur ein Beispiel sein.


Anmelden zum Antworten