Przeciążanie operatorów - problem z ostream

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ć?

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();
}
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;
0

zobacz czy zamiana tego

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

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

daje jakieś efekty.

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