我有以下代码:
#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;
那么事情就完美了。
我不明白为什么会这样。
请问有人给我解释吗?
感谢。
答案 0 :(得分:2)
由于该方法中s
为const
,但Student::getNo()
不是const
方法。它必须是const
。
这可以通过更改代码来完成,如下所示:
int getNo() const {
return this->no;
}
此位置的const
表示此整个方法在调用时不会更改this
的内容。