C++中>>操作员过载时出现问题?

Issue with overloading >> operator in C++?

本文关键字:gt 问题 操作员 C++      更新时间:2023-10-16

我有一个包含 3 个成员变量的类CMusic。我想通过首先声明一个对象,然后从控制台cin来输入它们。但是,编译器不喜欢我的运算符重载函数的>>运算符。我想问为什么会这样?提前感谢!

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class CMusic {
string m_strArtist;
string m_strTitle;
int m_iYear;
public:
CMusic() {
m_strArtist = "Vivaldi";
m_strTitle = "The 4 Seasons";
m_iYear = 1723;
}
friend istream& operator>> (istream& is, CMusic ms) {
is >> ms.getArtist();
is >> ms.getTitle();
is >> ms.getYear();
return is;
}
};
int main(){
CMusic msc;
cin>>msc;
}

operator>>重载的第二个参数需要是对要读入对象的非常量引用。 通过传递对象的副本,您将读取该临时副本并将其丢弃,而不是实际更新您尝试读取的对象。 所以它需要像这样:

friend istream& operator>> (istream& is, CMusic &ms) {
is >> ms.m_strArtist;
is >> ms.m_strTitle;
is >> ms.m_iYear;
return is;
}