关于在C ++中调用自定义IO运算符的方法的问题?

时间:2011-07-06 02:40:22

标签: io operators

我有以下代码:

#include "iostream"
#include "conio.h"
using namespace std;
 class Student {
 private:
     int no;
 public:
     Student(){}
     int getNo() {
         return this->no;
     }
     friend istream& operator>>(istream& is, Student& s);
     friend ostream& operator<<(ostream& os, const Student& s);
 };
 ostream& operator<<(ostream& os, const Student& s){
     os << s.getNo(); // Error here
     return os;
}
int main()
{
    Student st;
    cin >> st;
    cout << st;
    getch();
    return 0;
}

编译此代码时,编译器会生成错误消息:“error C2662: 'Student::getNo' : cannot convert 'this' pointer from 'const Student' to 'Student &'

但是,如果我创建no变量public并更改错误行,如:os << s.no;那么事情就完美了。 我不明白为什么会这样。 请问有人给我解释吗? 感谢。

1 个答案:

答案 0 :(得分:2)

由于该方法中sconst,但Student::getNo()不是const方法。它必须是const

这可以通过更改代码来完成,如下所示:

int getNo() const {
    return this->no;
}

此位置的const表示此整个方法在调用时不会更改this的内容。