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?