Przeciążanie operatorów - problem z ostream

Odpowiedz Nowy wątek
ciekawski
2012-03-16 20:20
ciekawski
0

Mam taki mały problem z przeciążaniem operatora << w C++. Funkcja przeciążająca operator wygląda tak:

ostream& operator<<(ostream & c, MojaKlasa &ob){
    if(ob.wartosc > 10)
        c<<"W porzadku\n"<<ob.liczba;
    else
        c<<ob.liczba;

    return c;
}

Teraz w funkcji main kiedy tworze obiekt w ten sposob:

MojaKlasa a,b;
cin>>a>>b;
cout<<a<<endl;

To wszystko jest w porządku, natomiast kiedy ostatni wiersz ma wyglądać tak:
cout<<a+b<<endl;
to wtedy dostaje error: error: no match for 'operator<<' in 'std::cout << c.MojaKlasa::operator+(((const MojaKlasa&)((const MojaKlasa*)(& a))))'
Sam operator dodawania jest przeciązony w ten sposób:

MojaKlasa MojaKlasa::operator+(const MojaKlasa &ob){
    MojaKlasa klasa(this->wartosc + ob.wartosc);
    return klasa;
}

Dodam, że deklaracja funkcji ostream w MojaKlasa jest funkcją zaprzyjaźnioną i wygląda tak:

friend ostream& operator<<(ostream& c, MyCal &ob);

Ktoś może mi wyjaśnić w czym tkwi błąd i jak go naprawić?

Pozostało 580 znaków

2012-03-16 20:35

Rejestracja: 9 lat temu

Ostatnio: 7 miesięcy temu

Lokalizacja: Kosmos

0

Jesteś pewien, że nie działa? Jaki kompilator? Mi w VC działa jak powinno, kod:

class Klasa
{
public:
    int wartosc;

    Klasa(int wartosc)
    {
        this->wartosc = wartosc;
    }

    Klasa operator+(const Klasa& o)
    {
        Klasa k(this->wartosc + o.wartosc);
        return k;
    }

    friend ostream& operator<<(ostream&s, Klasa& o);
};

ostream& operator<<(ostream& s, Klasa& o)
{
    s << o.wartosc;
    return s;
}

int main()
{
    Klasa a(50);
    Klasa b(100);

    cout << a + b << endl;
    cin.get();
}

Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał

Pozostało 580 znaków

ciekawski
2012-03-16 20:50
ciekawski
0

GNU GCC pod CodeBlocks. A działa Ci w takiej formie, którą podałem?

MojaKlasa a, b;
cin>>a>>b;
cout<<a + b<<endl;

lub

MojaKlasa a = 100, b = 100;
cout<<a + b<<endl;
No przecież napisałem: cout &lt;&lt; a + b &lt;&lt; endl;, reszta znaczenia nie ma. - xeo545x39 2012-03-16 21:20

Pozostało 580 znaków

Oak
2012-03-16 22:23
Oak

Rejestracja: 8 lat temu

Ostatnio: 4 lata temu

0

zobacz czy zamiana tego

ostream& operator<<(ostream & c, MojaKlasa &ob){

naostream& operator<<(ostream & c, const MojaKlasa &ob){


daje jakieś efekty.
edytowany 1x, ostatnio: Oak, 2012-03-16 22:23

Pozostało 580 znaków

Odpowiedz

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