C++ 重载运算符>>;:无法绑定&x2018;标准::基本信息流<;char>’;左值为‘;标准::基本信息流<;char>&&’;
我的标题中有这样的运算符:C++ 重载运算符>>;:无法绑定&x2018;标准::基本信息流<;char>’;左值为‘;标准::基本信息流<;char>&&’;,c++,c++11,C++,C++11,我的标题中有这样的运算符: friend std::istream& operator>> ( std::istream& is, StudentRecord& sr ); 在我的课堂上: std::istream& operator>>(std::istream& is , StudentRecord& sr){ is >> sr.name >>std::ws>> sr.su
friend std::istream& operator>> ( std::istream& is, StudentRecord& sr );
在我的课堂上:
std::istream& operator>>(std::istream& is , StudentRecord& sr){
is >> sr.name >>std::ws>> sr.surname>>std::ws>>sr.studentNumber>>std::ws;
getline(is, sr.classRecord);
return is;
}
但是,我得到以下错误:
std::basic_istream<char>’ lvalue to ‘std::basic_istream<char>&&
这个错误有点令人困惑,但它意味着没有可用于
sin>>newStudent的操作符>>
代码>
这是因为您已将newStudent
声明为函数(请参阅)。错误的措辞是因为右值流有一个重载,它接受右侧的任何内容:
template<typename CharT, typename TraitsT, typename T>
basic_istream<CharT, TraitsT>&
operator>>(basic_istream<CharT, TraitsT>&& istr, T&&);
或:
或:
或类似的。通过该更改,newStudent
具有正确的类型,因此可以使用您的操作符>>
重载。您还可以更改getline函数:
istream和getline(标准:istream和is、StudentRecord和sr)
不使用newStudent对象。显示如何调用此运算符。@VladfromMoscow Done,more additions?在函数read StudentRecord newStudent()中;表示函数声明。将其更改为StudentRecord newStudent;
template<typename CharT, typename TraitsT, typename T>
basic_istream<CharT, TraitsT>&
operator>>(basic_istream<CharT, TraitsT>&& istr, T&&);
StudentRecord newStudent;
StudentRecord newStudent{};
StudentRecord newStudent = newStudent();