C++ 将istream运算符与类交朋友

C++ 将istream运算符与类交朋友,c++,operator-overloading,C++,Operator Overloading,您好,我正试图将操作符>重载到我的类,但我在eclipse中发现了一个错误 代码: 代码2: friend istream& operator>>(const istream& is, const RAngle& ra) { is >> ra.x; is >> ra.y; return is } 撞车了,我也不知道为什么,请帮忙 编辑: ra.x和ra.y都是我班的两个私人INT 完全错误: 错误:

您好,我正试图将操作符
>
重载到我的类,但我在eclipse中发现了一个错误

代码:

代码2:

    friend istream& operator>>(const istream& is, const RAngle& ra)
{
    is >> ra.x;
    is >> ra.y;
    return is 
}
撞车了,我也不知道为什么,请帮忙

编辑:

ra.x
ra.y
都是我班的两个私人INT

完全错误:

错误:

   ..\/rightangle.h: In function 'std::istream& operator>>(std::istream&, const RAngle&)':
..\/rightangle.h:65:12: error: ambiguous overload for '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 for argument 1 from 'const int' to '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 for argument 1 from 'const int' to '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 for argument 1 from 'const int' to '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 for argument 1 from 'const int' to 'std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}'
..\/rightangle.h:66:12: error: ambiguous overload for '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 for argument 1 from 'const int' to '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 for argument 1 from 'const int' to '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 for argument 1 from 'const int' to '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 for argument 1 from 'const int' to 'std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}''
。\/rightangle.h:在函数“std::istream&operator>>(std::istream&,const RAngle&)”中:
..\/rightangle.h:65:12:错误:“is>>ra.RAngle::x”中“operator>>”的重载不明确
..\/rightangle.h:65:12:注:候选人为:
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7:注:std::basic\u istream:::\u istream类型和std::basic\u istream::operator>(std::basic\u istream::\u istream类型和(*)(std::basic\u istream::::\u istream类型和)[带字符,\u traituds=char::char\u traituds,std::basic\u istream:\u类型]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7:注意:参数1从“const int”到“std::basic\u istream:::_istream类型和(*)(std::basic\u istream::_istream类型和){aka std::basic\u istream&(*)(std::basic\u istream&)}
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7:注:std::basic\u istream::::\u istream类型&std::basic\u istream::operator>(std::basic\u istream::\u ios类型(*)(std::basic\u istream:&::\u ios类型&)[with(u CharT=char,_Traits=std::char\u Traits,std::basic\u istream:::(uu istream\u type=std::basic\u istream,std::basic\u istream::(uu ios\u type=std::basic\u ios]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7:注意:参数1从“const int”到“std::basic\u istream:::_ios_type&(*)(std::basic\u istream::_ios_type&){aka std::basic_ios&(*)(std::basic_ios&)}
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7:注:std::basic\u istream::::\u istream类型和std::basic\u istream::operator>(std::ios\u base&(*)(std::ios\u base&)[带字符,\u traitracts=std::char\u traitracts,std::basic\u istream::\u type=std::basic\u istream::]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7:注意:参数1从'const int'到'std::ios_base&(*)(std::ios_base&)'的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7:注:std::basic_-istream&std::basic_-istream::operator>>(std::basic_-istream:::_-streambuf-type*)[with _-CharT=char,_-traituds=char::Traits,std::basic_-istream::_-streambuf-type=std::basic(基本(-streambuf-buf-type=std]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7:注意:参数1从“const int”到“std::basic\u istream:::_streambuf_type*{aka std::basic\u streambuf*}没有已知的转换
..\/rightangle.h:66:12:错误:“is>>ra.RAngle::y”中“operator>>”的重载不明确
..\/rightangle.h:66:12:注:候选人为:
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7:注:std::basic\u istream:::\u istream类型和std::basic\u istream::operator>(std::basic\u istream::\u istream类型和(*)(std::basic\u istream::::\u istream类型和)[带字符,\u traituds=char::char\u traituds,std::basic\u istream:\u类型]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:122:7:注意:参数1从“const int”到“std::basic\u istream:::_istream类型和(*)(std::basic\u istream::_istream类型和){aka std::basic\u istream&(*)(std::basic\u istream&)}
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7:注:std::basic\u istream::::\u istream类型&std::basic\u istream::operator>(std::basic\u istream::\u ios类型(*)(std::basic\u istream:&::\u ios类型&)[with(u CharT=char,_Traits=std::char\u Traits,std::basic\u istream:::(uu istream\u type=std::basic\u istream,std::basic\u istream::(uu ios\u type=std::basic\u ios]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:126:7:注意:参数1从“const int”到“std::basic\u istream:::_ios_type&(*)(std::basic\u istream::_ios_type&){aka std::basic_ios&(*)(std::basic_ios&)}
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7:注:std::basic\u istream::::\u istream类型和std::basic\u istream::operator>(std::ios\u base&(*)(std::ios\u base&)[带字符,\u traitracts=std::char\u traitracts,std::basic\u istream::\u type=std::basic\u istream::]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:133:7:注意:参数1从'const int'到'std::ios_base&(*)(std::ios_base&)'的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7:注:std::basic_-istream&std::basic_-istream::operator>>(std::basic_-istream:::_-streambuf-type*)[with _-CharT=char,_-traituds=char::Traits,std::basic_-istream::_-streambuf-type=std::basic(基本(-streambuf-buf-type=std]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/istream:241:7:注意:参数1从“const int”到“std::basic\u istream:::”streambuf_type*{aka std::basic\u streambuf*}”的转换未知

请从参数“const RAngle&ra”中删除const。您不能从方法中修改常量引用。

请从参数“const RAngle&ra”中删除const。您不能从方法中修改常量引用。

运算符的签名中存在一个问题:

friend istream& operator>>(const istream& is, const RAngle& ra){
//                         ^^^^^              ^^^^^
    return is >> ra.x >> ra.y;
}

如果参数是
const
,您将无法修改它们。截至错误消息,它们似乎表明编译器未能为
is>>ra.x
is>>ra.y
找到适当的重载。这可能与上一个问题有关(找不到采用const左值的重载)或否,取决于
ra.x
ra.y
的类型(问题中未显示)。

一个问题是操作员的签名:

friend istream& operator>>(const istream& is, const RAngle& ra){
//                         ^^^^^              ^^^^^
    return is >> ra.x >> ra.y;
}
如果参数是
const
,您将无法修改它们。截至错误消息,它们似乎表明编译器未能找到
is>>ra.x
is>>ra.y
的适当重载。
friend std::istream &operator>>(std::istream &is, RAngle &ra) { 
    return is >> ra.x >> ra.y;
}