Przeciążenie ifstream

0

Witam chciałem sobie przeciążyć operator >> dla strumienia plikowego więc napisałem taki kawałek kodu:

ifstream& operator >>(ifstream& strm, Macierz &ob)
{
	char znak;
         strm>>znak;  //zczytaj ten znak

return strm;
}
 

kompilator na to:

error: no match for ‘operator>>’ in ‘strm >> znak’

Co w takim wypadku mógłbym zrobić, żeby to zadziałało?

0

Nagłówek <fstream> jest? Co z przestrzenią nazw? Masz gdzieś using namespace std;? Albo dopisz do elementów z biblioteki standardowej std::.

0

Zapomniałem dać include <fstream> -,-' późna godzina chyba:)

0

Teraz dla odmiany taki problem ...;/
Kiedy już przeciążyłem odpowiednio operator strumienia mam problem z przeciążeniem operatora ostream w szablonie klasy. Mianowicie dla typu double działa poprawnie natomiast dla mojego typu liczba zespolona wyrzuca błąd:

<ort> error: no match for ‘operator<’ in ‘strm < ob.Macierz<liczbazespolona>::macierz[i][j]’ inc/macierz.hh:155:6: note: candidates are: /usr/include/c++/4.6/ostream:110:7: note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<(std::basic_ostream<_CharT, _Traits>::__ostream_type& (*)(std::basic_ostream<_CharT, _Traits>::__ostream_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>] </ort>

dodam, ze mam przeciążony operator dla klasy liczba zespolona.

kod przeciążenia operatora ostream szablonu klasy:

 
template <class T> ostream& operator << (ostream &strm, const Macierz<T> &ob)
{
	//ustaw notacje naukowa
	cout.setf(std::ios_base::fixed);
	//ustaw liczby po kropce
	cout.precision(2);
	//pokaz kropke
	cout.setf(std::ios_base::showpoint);
	//wyswietlaj macierz
	for(int i=0;i<3;i++)
	{		cout<<"| ";
			for(int j=0;j<3;j++)
			{
					strm<<ob.macierz[i][j]<<" ";
			}
			cout<<"|"<<endl;
	}

	//zwroc strumien 
	return strm;
	
}


w tym momencie jeśli usunę jeden wymiar tablicy tzn zostanie ob.macierz[i] to się kompiluje ale wyswietla mi bloki pamięci tylko ... Słyszałem że podobno trzeba użyć jakiegoś specjalnego iteratora? Ktoś może mi podpowiedzieć co nieco?
0

ifstream& operator >>(ifstream& strm, Macierz &ob)

dlaczego ifstream a nie po prostu istream?

cout.setf(std::fixed);

dlaczego odwołujesz się do cout zamiast do argumentu operatora (u ciebie ostream &strm)?

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