Przeciążanie operatora >>

0

Dzisiaj mam do Was następujące pytanie dotyczące przeładowania operatora >>. Otóż co muszę zrobić. Musze przeładować operator >>, tak aby korzystać później z zapisu cin>>c; gdzie c jest u mnie jakąś klasą do reprezentacji liczb zespolonych.
No i początkowo myślałem, że da się to zrobić analogicznie do przeładowania <<, które zrealizowałem tak:

std::ostream & operator<<(std::ostream &os, const complex &a)
{
	os<<"("<<a.real_number<<", "<<a.imaginary_number<<")\n";
	return os;
}

Stąd też myślałem, że przeładowanie >> polega na tym samym. Jednak w takim przeładowaniu kompilator widzi błąd. Ja nie za bardzo wiem dokładnie jaki, bo zazwyczaj wszyscy zajmują się przeładowywaniem <<, zamiast >>. Kompilator po prostu twierdzi, że "No operator >> matches these operands" Mógłby mnie ktoś naprowadzić dlaczego nie można wysłać składowej klasy do strumienia wejścia? :)

std::ostream & operator>>(std::ostream &os, const complex &a)
{
	std::cout<<"Skladowa rzeczywista: "<<std::endl;
	os>>a.real_number;
	std::cout<<"Skladowa urojona: "<<std::endl;
	os>>a.imaginary_number;
	return os;
}
1

usuń const przy const complex &a.
operator wczytywania modyfikuje obiekt który stoi po prawej stronie(to chyba logiczne, musi do niego posłać dane z klawiatury). Zaś ty zadeklarowałeś w funkcji ,że nie będziesz zmieniał obiektu na któy wskazuje referencja

0

Dziękuję :). Faktycznie błąd był głupi, był jeszcze jeden również głupi, otóż rozpędziłem się i zrobiłem to na std::ostream, gdzie powinienem na std::istream.

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