Podczas kompilacji mam taki błąd:
In function `std::ostream& operator>(Ulamek&, Ulamek&)':
invalid initialization of reference of type 'std::ostream&' from expression of type 'Ulamek'
Proszę o pomoc...
#include <iostream>
using namespace std;
class Ulamek
{
int l; // licznik
int m; // mianownik
int nwp(int p, int q); // najwiekszy wspolny podzielnik
public:
Ulamek(int a=0, int b=1) // Konstruktor
{ int q=nwp(a,b);
if(b < 0) q = -q; // mianownik ma być zawsze dodatni
l = a/q;
m = b/q;
}
int ZwrocLicznik()const { return l; }
int ZwrocMian()const { return m;}
friend ostream& operator << (ostream &wy, const Ulamek &f);
friend ostream& operator>(const Ulamek &a, const Ulamek &b);
};
int Ulamek::nwp(int p, int q)
{ int r;
p = abs(p); // obliczenia na wartosciach nieujemnych
q = abs(q);
// Przypadki szczególne
if(p == 0) if(q == 0) return 1; else return q;
else if(q == 0) return p;
// p>0, q>0
r = p % q;
while(r) { p = q; q = r; r = p % q; }
return q;
}
template <class Ulamek>
Ulamek maks(Ulamek a, Ulamek b)
{
//b = Ulamek.ZwrocLicznik()/Ulamek.ZwrocMian();
return a > b ? a : b ;
}
int main ()
{
Ulamek f1(1,2);
Ulamek f2(1,5);
//cout << "maks(10.1, 15.2) = " << maks(10.1, 15.2) << endl ;
cout << "maks(10, 15) = " << maks(f1, f2) << endl ;
cout << f1.ZwrocLicznik() << endl;
cin.get();
return 0;
}
ostream& operator<<(ostream& wy, const Ulamek &f)
{
wy << f.l << "/" <<f.m;
return wy;
}
ostream& operator>(Ulamek &a, Ulamek &b)
{
Ulamek a1 = a.ZwrocLicznik()/a.ZwrocMian();
Ulamek b1 = b.ZwrocLicznik()/b.ZwrocMian();
return a1 > b1 ? a1 : b1 ;
}