Вопрос о вызове метода внутри пользовательского оператора ввода-вывода в C ++? - PullRequest
0 голосов
/ 06 июля 2011

У меня есть следующий код:

#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 &'"

Но если я сделал переменную nopublic и измените строку ошибки следующим образом: os << s.no; тогда все заработало отлично.Я не понимаю, почему это произошло.Кто-нибудь может дать мне объяснение, пожалуйста?Благодаря.

1 Ответ

2 голосов
/ 06 июля 2011

Поскольку s в этом методе const, но Student::getNo() не является const методом.Это должно быть const.

Это делается путем изменения вашего кода следующим образом:

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

const в этой позиции означает, что этот весь метод не изменяет содержимое this при его вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...