Überladender Operator Problem



  • Schönen guten Abend 🙂
    Bin gerade dabei ein wenig c++ für meine Klausur zu üben.
    Versuche mich gerade an überladenen Operatoren und habe ein ein wenig zusammen gebastelt und stoße nun auf folgendes Problem.

    Ich bekomme eine Fehlermeldung und weiß die Ursache leider nicht 😞

    CAuto operator + (const CAuto& lop, const CAuto& rop)
    {
    	CAuto r;
    
    	r.m_Name = lop.m_Name + rop.m_Name;
    	r.m_AnzahlTueren = lop.m_AnzahlTueren + rop.m_AnzahlTueren;
    	r.m_AnzahlReifen = lop.m_AnzahlReifen + rop.m_AnzahlReifen;
    
    	return r;
    }
    

    Meine h. File:

    #ifndef CAUTO_H_
    #define CAUTO_H_
    
    using namespace std;
    #include <iostream>
    
    class CAuto
    {
    private:
    	int m_AnzahlReifen;
    	int m_AnzahlTueren;
    	string m_Name;
    
    public:
    	CAuto(string Name,int Reifen,int Tueren);
    	virtual ~CAuto();
    	void print();
    	friend ostream& operator << (ostream& lop,CAuto& rop);
    	friend CAuto operator + (const CAuto& lop,const CAuto& rop);
    };
    
    #endif /* CAUTO_H_ */
    

    Fehlermeldung:

    Description Resource Path Location Type
    no matching function for call to 'CAuto::CAuto()' CAuto.cpp /Auf andere Attribute zugreifen und Operatorüberladung Übung/myCode line 42 C/C++ Problem

    Danke schon mal im Voraus

    Liebe Grüße



  • Ok ich habe es herausgefunden 😃

    Ein neues Objekt erstellen ohne Default Konstruktor ist halt doof 😛
    Wenn ich das neue Objekt "r" mir ParameterWerten versehe, funktioniert es 🙂

    //CLOSED



  • Nicht immer macht ein Default-Konstruktor Sinn. Ich frage mich z.B. gerade wieviele Türen oder welchen Namen wohl ein sinnvolles Standard-Auto hat, das man im Default-Konstruktor baut.

    Ein Default-Konstruktor, nur damit man das Objekt wie ein klassisches C-Struct "manuell" initialisieren kann ist jedenfalls kein gutes Argument einen solchen zu haben.
    Alternativ wäre auch folgender Code im operator+ denkbar, der keinen Default-Konstruktor benötigt:

    return CAuto{ lop.m_Name + rop.m_Name, lop.m_AnzahlReifen + rop.m_AnzahlReifen, lop.m_AnzahlTueren + rop.m_AnzahlTueren }
    


  • Vielen Dank hat funktioniert 🙂


Log in to reply