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; }