Kompilator nie radzi sobie z komplilacją programu i zwraca błąd.

0
#include <iostream>
using namespace std;

int NWD(int a, int b) {
    int r = a % b;
    while (r != 0) {
        a = b;
        b = r;
        r = a % b;
    }
    return b;
}
int NWW(int a, int b) {
    return a * b / NWD(a, b);
}

struct ulamek {
    int licznik, mianownik;
};

ulamek Suma(ulamek u1, ulamek u2) {
    ulamek w; // ułamek wynikowy
    w.licznik = u1.licznik * u2.mianownik + u2.licznik * u1.mianownik;
    w.mianownik = u1.mianownik * u2.mianownik;
    //skracanie ułamka wynikowego
    if (w.licznik == 0)
        w.mianownik = 1;
    else {
        int x; // zmienna pomocnicza do obliczania NWD
        if (w.licznik < 0)
            x = NWD(-w.licznik, w.mianownik);
        else
            x = NWD(w.licznik, w.mianownik);
        w.licznik /= x;
        w.mianownik /= x;
    }
    return w;
}

int main() {
    ulamek u1, u2;
    cin >> u1.licznik >> u1.mianownik >> u2.licznik >> u2.mianownik;
    cout << Suma(u1, u2) << endl;
}

Program nie chce się skompilować i pokazuje błąd w linijce cout << Suma(u1, u2) << endl; nie wiem z jakiego powodu. Proszę o odpowiedź i wytłumaczenie dlaczego tak jest.

1

Funkcja suma zwraca Ci Strukturę ułamek. Nie masz przeciążonego operatora << dla tej struktury, stąd błąd kompilacji.

std::ostream& operator <<(std::ostream& os, const ulamek& u) {
       os << u.licznik << " " << u.mianownik << '\n';
       return os;
}

powinno załatwić sprawę.

E: oczywiście kombinacja linijki drugiej w tej krótkiej funkcji może być dowolna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1