Ü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++ ProblemDanke 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 imoperator+
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