Объекты внутри std::set
всегда const
.То есть, чтобы защитить их, в случае, если вы решите изменить какое-либо ключевое поле, порядок сортировки изменится, а установленный инвариант нарушится.
Таким образом, в основном set<CStudent>::iterator
- это const_iterator
, и вы получите const CStudent&
ссылка.Поскольку ваш CStudent::getP
не является const
функцией-членом, вы не можете использовать ее.
Решение, сделайте его const
:
int getP() const {
return m_iPoints;
}
Естественно, вы хотите пометить как const
любая функция, которая не изменяет содержимое вашего объекта, не только те, которые std::set
требуют от вас этого.Это иногда называется const-правильность и всегда является хорошей практикой.