ü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_


Anmelden zum Antworten