überladener Operator
-
Hallo,
ich habe hier ein Problem, an dem ich einfach nicht weiterkomme. Vieleicht sehe ich auch den Wald vor lauter Bäumen nicht.
Also ich habe eine Klasse Fraction/* File: frac.hpp */ class Fraction { private: long numerator; long denominator; [...] public: Fraction(const long& num, const long& denom); friend ostream& operator<<(ostream& os,Fraction &frac); [...] Fraction shorten(); [...] };
Die Funktion shorten() sieht so aus:
/* File: frac.cpp */ [...] Fraction Fraction::shorten() { long ggtmp = ggt(); //ggt() ist eine private Funktion der Klasse return Fraction(numerator/ggtmp,denominator/ggtmp); }
Den << Operator habe ich global so überladen:
/* File: frac.cpp */ [...] ostream& operator<<(ostream& os, Fraction& frac) { return os<<frac.numerator<<"/"<<frac.denominator; }
Mein Testprogramm sieht so aus:
#include <iostream> #include "frac.hpp" int main() { Fraction testFrac(5,10); std::cout<<testFrac<<std::endl; //funktioniert prima std::cout<<testFrac.shorten()<<std::endl; //funktioniert nicht return 0; }
Ich bekomme eine Meldung, dass kein passender Funktionstyp dafür gefunden wird (gefolgt von einer langen Aufzählung, was es denn alles für Überladungen gibt).
Ist mein Code irgendwie fehlerhaft?
-
das object mus im stream const sein
operator<<(ostream& , const &)
-
danke, so funktioniert es. Aber warum muss es const sein ?
-
hi,
es muss nicht unbedingt "const" sein, doch zur ausgabe willst du das "objekt" nicht modifizieren, oder
? also schreibt man das const hin...
mfg _mika_