Android Emulator - сообщение об ошибке & # 39; К сожалению, браузер перестал работать & # 39;

Позвольте мне привести более подробный пример. Что касается ниже структуры:

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]

Чтобы решить эту проблему, вы можете:

  1. изменить метод uint32_t getCount(){...} на uint32_t getCount() const {...}. Таким образом, count.getCount() не будет изменять элементы в count.

или

  1. изменить uint32_t add(const Count& count){...} на uint32_t add(Count& count){...}. Поэтому count не заботится об изменении членов в нем.

Что касается вас, объекты в std :: set сохраняются как const StudentT, но метод getId и getName не const, поэтому вы указываете вышеприведенную ошибку.

Вы также можете увидеть этот вопрос Значение 'const' последним в объявлении функции класса? для более подробно.

13
задан Pavel Chuchuva 21 September 2016 в 19:47
поделиться