passing ‘const std::map<int, int>’ as ‘this’ argument discards qualifiers

135
07 мая 2019, 09:40

Когда пытаюсь прочитать значение карты map в методе класса с помощью map[key], то получаю непонятную ошибку

passing ‘const std::map’ as ‘this’ argument discards qualifiers

Что она означает?

добавил код

class Rectangle {
private:
    std::map<int, int> vertices;
public:
    Rectangle(const map<int, int>& vertices) {
        this->vertices = vertices;
    }
    void print_vertices() const {
        cout << vertices[0];
        cout << vertices[1];
        cout << vertices[2];
        cout << vertices[3];
    }
    // ...
};
int main() {
    Rectangle x{{{0, -34}, {1, 45}, {2, 92}, {3, 0}}};
    x.print_vertices();
}
Answer 1

Оператор [] в std::map является модифицирующим оператором. Его не разрешается вызывать на константных std::map, о чем вам компилятор и говорит.

Для константных std::map существует метод at

void print_vertices() const {
    cout << vertices.at(0);
    ...
}

Имейте только в виду, что этот метод будет бросать исключения в ответ на несуществующий ключ.

READ ALSO
Неправильно вычисляю выражение

Неправильно вычисляю выражение

В общем в одном из алгоритмов потребовалось вычислять квадратный корень из суммы квадратов двух аргументовКазалось бы, всё просто и я написал...

133
Перевести вектор в строку

Перевести вектор в строку

Как правильно перевести std::vector<int> в std::string? То есть например для вектора 1,2,3,4,5 должна быть строка 12345 на выходе

128
Проблема с регуляркой

Проблема с регуляркой

Есть регулярное выражение:

133
Включение библиотек в проект cmake

Включение библиотек в проект cmake

Осваиваю cmake и столкнулся вот с какой проблемой: У меня есть три папки с написанными мною статическими библиотекамиНазовем их a, b и c

148