Io C++中自定义I/O运算符的问题
我有以下代码:Io C++中自定义I/O运算符的问题,io,operators,Io,Operators,我有以下代码: class Student { public: Student(){} void display() const{} friend istream& operator>>(istream& is, Student& s){return is;} friend ostream& operator<<(ostream& os, const Student& s){ret
class Student {
public:
Student(){}
void display() const{}
friend istream& operator>>(istream& is, Student& s){return is;}
friend ostream& operator<<(ostream& os, const Student& s){return os; }
};
int main()
{
Student st;
cin >> st;
cout << st;
getch();
return 0;
}
并获得错误消息:错误C2679:二进制'>>':未找到接受类型为'Student'的右操作数的运算符,或者没有可接受的转换
有人能给我一个清楚的解释吗?我忘了操作符是在哪里定义的,但它可能是全局操作符>>,也可能是属于流的操作符
在Student中定义它是错误的。您不能说该函数是友元函数,然后将该函数内联。friend关键字表示函数未在类中定义,但它可以访问类的所有私有和受保护变量。将代码更改为:
class Student {
public:
Student(){}
void display() const{}
friend istream& operator>>(istream& is, Student& s);
friend ostream& operator<<(ostream& os, const Student& s);
};
istream& operator >>(istream& is, Student& s) { return is; }
ostream& operator <<(ostream& os, const Student& s) { return os; }
再看一个例子
对于>,左侧操作数始终是文件流,因此您不能在实际类中重载它们—从技术上讲,它必须放在文件流类中
class Student {
public:
Student(){}
void display() const{}
friend istream& operator>>(istream& is, Student& s);
friend ostream& operator<<(ostream& os, const Student& s);
};
istream& operator >>(istream& is, Student& s) { return is; }
ostream& operator <<(ostream& os, const Student& s) { return os; }