Позвольте мне привести более подробный пример. Что касается ниже структуры:
struct Count{
uint32_t c;
Count(uint32_t i=0):c(i){}
uint32_t getCount(){
return c;
}
uint32_t add(const Count& count){
uint32_t total = c + count.getCount();
return total;
}
};
Как вы видите выше, IDE (CLion) даст подсказки Non-const function 'getCount' is called on the const object
. В методе add
count
объявлен как объект const, но метод getCount
не является методом const, поэтому count.getCount()
может изменять члены в count
.
Ошибка компиляции, как показано ниже (основное сообщение в моем компиляторе):
error: passing 'const xy_stl::Count' as 'this' argument discards qualifiers [-fpermissive]
Чтобы решить эту проблему, вы можете:
uint32_t getCount(){...}
на uint32_t getCount() const {...}
. Таким образом, count.getCount()
не будет изменять элементы в count
. или
uint32_t add(const Count& count){...}
на uint32_t add(Count& count){...}
. Поэтому count
не заботится об изменении членов в нем. Что касается вас, объекты в std :: set сохраняются как const StudentT, но метод getId
и getName
не const, поэтому вы указываете вышеприведенную ошибку.
Вы также можете увидеть этот вопрос Значение 'const' последним в объявлении функции класса? для более подробно.