Weiterreichen von Konstruktor-Argumenten



  • Hallo,

    ich habe folgende Teile eines C+-Programmes:

    myHeader.h

    class Foo {
    
    private:
       Bar bar;
    
    public:
       Foo(int size);
       ~Foo();
    }
    
    class Bar {
    
    public:
       Bar(int size);
       ~Bar();
    
       void doSomething();
    }
    

    Foo.cpp:

    include "myHeader.h";
    
    Foo::Foo(int size) {
    
       // Das geht nicht !!! Warum?
       this->bar = Bar(size);
    }
    
    Foo::~Foo() {
    }
    

    Bar.cpp:

    // Nicht wichtig...

    Worum es mir hier geht ist, beim Instanziieren der Klasse Foo automatisch im Konstruktor ein Objekt von Bar zu erzeugen und den Wert von size dessen Konstruktor übergeben (durchzureichen). Ich erhalte immer die Fehlermeldung, dass kein solcher Default-Konstruktor für Bar existiert. Ist es so, dass die Klasse Bar durch die Header-Datei vor der Ausführung des Konstruktors erzeugt wird bzw. es versucht wird, aber kein KOnstruktor ohne Argumente existiert?

    Ich habe mal was von einem Basisinitialisierer gehört, kann ich den dafür gebrauchen?

    Vielen herzlichen Dank!!

    /edit: Titel auf Wunsch geändert (davie)



  • Sorry, der Titel ist natürlich falsch gewählt. Es sollte eher heißen: Weiterreichen von Konstruktor-Argumenten?



  • bar wird instanziiert, bevor du this->bar = Bar(10) schreibst. Du brauchst eine Elementinitialisierungsliste:

    Foo::Foo (int x) : bar(x) { }
    

    oder eben einen defaultkonstruktor und einen operator=, wenn du es so machst, wie du geschrieben hast.


Anmelden zum Antworten