Ошибка преобразования типа указателя класса в ключ - PullRequest
0 голосов
/ 12 октября 2018

Я немного новичок в c ++, и у меня странная ошибка.У меня есть довольно простой класс, который я написал, под названием endpointendpoint у меня есть атрибут типа std::map<endpoint*, ppr_t> (где ppr_t - это typedef для структуры).Когда я пытаюсь проверить элемент на карте, запустив метод count для атрибута, я получаю следующую ошибку компиляции:

error: invalid conversion from ‘const endpoint*’ to ‘std::map<endpoint*, ppr_t>::key_type {aka endpoint*}’

Я не уверен, почему эта ошибка появляется.Может быть, это потому, что у меня нет функции сравнения для этого класса?Тем не менее, такая же ошибка возникает при использовании std::unordered_map.

1 Ответ

0 голосов
/ 12 октября 2018

Вы пытаетесь присвоить const endpoint* значению endpoint, которое отбрасывает квалификатор const.Это сделано для того, чтобы вы не могли изменить значение ключа карты.

Карты предназначены для быстрого поиска значений с помощью их ключа.Вставляя пару в карту, вы «привязываете» определенный ключ со значением.Например, телефонная книга.Вы помните, что можете позвонить своему другу (значение = номер телефона), если найдете его имя (ключ) в телефонной книге.Но если вы измените его имя, кто является владельцем этого номера телефона?Эта ситуация странная и приводит к ошибкам.Но вместо этого вы можете легко изменить номер своего друга, когда он скажет вам, что купил новый телефон.

Таким образом, вы можете использовать только указатели const, если вы получаете его от ключа, чтобы не нарушать организацию карты.и все равно находите значения по их ключам.И вы можете использовать неконстантные указатели или ссылки на значения и изменять их в любое время, когда они будут по-прежнему доступны с постоянным ключом.

...