problem beim übergeben eines objekts ohne defaultkonstruktor



  • hi!
    ich habe folgendes problem:

    ich bau mir eine klasse "klasse"

    class klasse
    {
    private:
       const int mBlub
    
    public:
        klasse(int blub) { mBlub = blub; }
    };
    

    nun möchte ich ein objekt vom typ "klasse" als parameter dem konstruktor einer anderen klasse übergeben

    class andere_klasse
    {
    private:
       klasse mKlasse;
    
    public:
       andere_klasse(klasse _klasse) { mKlasse = _klasse; } <- fehler
    };
    

    fehler:
    in klasse ist kein geeigneter defaultkonstruktor verfügbar.

    ich habe auch nicht vor ein defaultkonstruktor zu implementieren und soweit ich informiert bin wird beim übergeben von objekten der kopierkonstruktor ausgeführt.
    warum ensteht hier so ein fehler?



  • krabbels schrieb:

    hi!
    ...warum ensteht hier so ein fehler?

    Hi,

    weil Du versuchst,
    a) ein Objekt der Klasse "klasse" zu erzeugen, ohne einen Parameter zu übergeben und
    b) trotzdem keinen Konstruktor dafür bereitstellst.

    Da kann einfach ein Compiler nichts anderes entscheiden.

    Wenn Du "andere Klasse" erzeugst, wird automatisch mKlasse instantiiert bevor der Funktionsbody des andere_Klasse-Konstruktors aufgerufen wird !.
    Ausweg: Initialisierungsliste:

    class andere_klasse
    {
    private:
       klasse mKlasse; 
    
    public:
       andere_klasse(klasse _klasse) : mKlasse(_klasse) {}
    };
    

    Gruß,

    Simon2.



  • Das Objekt _klasse wird temporär erzeugt (Defaultconstructor), und danach mKlasse zugewiesen (operator=), wenn du ne Initialisierungsliste machst, wird der Copyconstructor benutzt.

    andere_klasse(klasse _klasse): mKlasse(_klasse) {}
    


  • class klasse 
    { 
    private: 
       const int mBlub ;
    
    public: 
        klasse(int blub) { mBlub = blub; } 
    };
    

    initialisierung von mBlub muss in die initialisierungsliste



  • danke für die antworten


Anmelden zum Antworten