I have the following code:
#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;
}
When compiling this code, the compiler produced the error message: “error C2662: 'Student::getNo' : cannot convert 'this' pointer from 'const Student' to 'Student &'“
But if I made the no variable public and change the error line like: os << s.no; then things worked perfectly.
I do not understand why this happened.
Can anyone give me an explanation, please?
Thanks.
Because
sisconstin that method, butStudent::getNo()isn’t aconstmethod. It needs to beconst.This is done by changing your code as follows:
The
constin this position means that this entire method does not change the contents ofthiswhen it is called.