Überladener Operator funktioniert in Methode nicht
-
Hey Leute,
ich habe folgendes Problem mit meinem C++ Programm:
Und zwar habe ich eine Ausgabemethode der Klasse "ausgabe" erstellt und will diese mit Hilfe des von mit überladenen Operators "<<" betreiben. Wenn ich den Operator selbst im meinem Testrahmen verwende, klappt alles. Bei der Nutzung von "ausgabe" geschieht allerdings nichts und es kommt auch keine Fehlermeldung.komplex.h
friend std::ostream& operator<< (std::ostream& temp, komplex& t); void ausgabe(std::ostream& temp) const;
komplex.cpp
ostream& operator<< (ostream &temp, komplex &t) { temp << t.betrag() << "exp(" << "j" << t.phase() << ")" << endl; return temp; } void komplex::drucke(ostream& temp) const { cout << temp; }
test.cpp
komplex b (5, 120); b.drucke(cout); //geht nicht cout << b; //geht
Vielleicht hat einer ne Idee was fehlt.
-
@nick1998 Hi, du hast die Methode ausgabe nicht gepostet. Sowieso solltest du ein Minimalbeispiel posten, das ich kopieren und dann durch den Copiler jagen kann.
Und cout << temp ist auch nicht das, was du haben willst.
-
Sorry habe "ausgabe" aus versehen umbenannt. "drucke" = "ausgabe"
@out sagte in Überladener Operator funktioniert in Methode nicht:
Und cout << temp ist auch nicht das, was du haben willst
Stimmt ja, eigentlich will ich "<<" auf das aktuelle Objekte b anwenden, aber wie muss ich ihm das sagen?
-
@Nick1998
void komplex::drucke() const { cout << *this; }
-
Leider kommt dann folgende Fehlermeldung:
"IntelliSense: no operator "<<" matches these operands, operand types are: std::ostream << const cmplxpol"
und
"error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const cmplxpol' (or there is no acceptable conversion) "
-
Dein operator<< sollte
komplex cost&
entgegennehmen.betrag() und phase() müssen natürlich auch const sein.
-
@nick1998 Du musst sicherstellen, dass das Objekt *this nicht verändert wird. Der Compiler denkt, das passiert bei dir in der operator<< Funktion. Jetzt überleg mal, wie du dem Compiler verklickerst, dass das Objekt nicht verändert wird.
-
Dir ist klar, dass es std::complex gibt?
https://en.cppreference.com/w/cpp/numeric/complex
-
Ich weis das man beim überladen const dazuschreiben soll, aber wenn ich das mache:
ostream& operator<< (ostream &temp, komplex const &t) { temp << t.betrag() << "exp(" << "j" << t.phase() << ")" << endl; return temp; }
und:
friend std::ostream& operator<< (std::ostream& temp, komplex& const t);
Wird mir "t" markiert mit:
"IntelliSense: the object has type qualifiers that are not compatible with the member function
object type is: const komplex "@manni66 sagte in Überladener Operator funktioniert in Methode nicht:
Dir ist klar, dass es std::complex gibt?
Ja allerdings will ich diese sozusagen selber realisieren.
Betrag und Phase sind wie folgt in der Headerdatei implementiert:
class cmplxpol { private: float betr; float phas;
Und "betrag" und "phase" in der Quelldatei:
float komplex::betrag(void) { return betr; } float komplex::phase(void) { return phas; }
-
@manni66 sagte in Überladener Operator funktioniert in Methode nicht:
betrag() und phase() müssen natürlich auch const sein.