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();