c++ - friending istream operator with class -
hello i'm trying overload operator >> class ecnouter error in eclipse.
code:
friend istream& operator>>(const istream& is, const rangle& ra){ return >> ra.x >> ra.y; } code2:
friend istream& operator>>(const istream& is, const rangle& ra) { >> ra.x; >> ra.y; return } both crash , don't know why, please help.
edit:
ra.x & ra.y both 2 private ints of class;
full error:
error:
..\/rightangle.h: in function 'std::istream& operator>>(std::istream&, const rangle&)': ..\/rightangle.h:65:12: error: ambiguous overload 'operator>>' in 'is >> ra.rangle::x' ..\/rightangle.h:65:12: note: candidates are: c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__istream_type& (*)(std::basic_istream<_chart, _traits>::__istream_type&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7: note: no known conversion argument 1 'const int' 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}' c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__ios_type& (*)(std::basic_istream<_chart, _traits>::__ios_type&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>, std::basic_istream<_chart, _traits>::__ios_type = std::basic_ios<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7: note: no known conversion argument 1 'const int' 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}' c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7: note: no known conversion argument 1 'const int' 'std::ios_base& (*)(std::ios_base&)' c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7: note: std::basic_istream<_chart, _traits>& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__streambuf_type*) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__streambuf_type = std::basic_streambuf<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7: note: no known conversion argument 1 'const int' 'std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}' ..\/rightangle.h:66:12: error: ambiguous overload 'operator>>' in 'is >> ra.rangle::y' ..\/rightangle.h:66:12: note: candidates are: c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__istream_type& (*)(std::basic_istream<_chart, _traits>::__istream_type&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7: note: no known conversion argument 1 'const int' 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}' c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__ios_type& (*)(std::basic_istream<_chart, _traits>::__ios_type&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>, std::basic_istream<_chart, _traits>::__ios_type = std::basic_ios<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7: note: no known conversion argument 1 'const int' 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}' c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7: note: std::basic_istream<_chart, _traits>::__istream_type& std::basic_istream<_chart, _traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__istream_type = std::basic_istream<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7: note: no known conversion argument 1 'const int' 'std::ios_base& (*)(std::ios_base&)' c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7: note: std::basic_istream<_chart, _traits>& std::basic_istream<_chart, _traits>::operator>>(std::basic_istream<_chart, _traits>::__streambuf_type*) [with _chart = char, _traits = std::char_traits<char>, std::basic_istream<_chart, _traits>::__streambuf_type = std::basic_streambuf<char>] <near match> c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7: note: no known conversion argument 1 'const int' 'std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}''
since operator>> going modify parameters pass it, cannot references const, want like:
friend std::istream &operator>>(std::istream &is, rangle &ra) { return >> ra.x >> ra.y; } note i/o operation (at least potentially) changes state of stream, (nearly?) want pass stream parameters non-const reference.
Comments
Post a Comment