оператор const и перегрузки

У меня есть общий объект карты.
Я хочу перегрузить оператор [] так map[key] вернуть значение ключа.
Я сделал две версии подстрочного оператора.

неконстантная:

ValueType& operator[](KeyType key){

Const:

const ValueType& operator[]( KeyType&   key) const{

Неконстантные версии работают нормально, но когда я создаю константную карту, у меня возникают проблемы.
Я пишу в основном:

     const IntMap map5(17);
map5[8];

и я получаю эти ошибки:

ambiguous overload for 'operator[]' (operand types are 'const IntMap {aka const mtm::MtmMap<int, int>}' and 'int')invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'

0

Решение

Сообщение об ошибке о неоднозначности отражает ваш компилятор, учитывая оба ваших operator[]() в качестве возможных кандидатов для соответствия map5[8], Оба кандидата одинаково хороши (или плохи, в зависимости от того, как вы на это смотрите).

Затем на-const версия неверна, потому что map5 является const,

const версия требует инициализации неconst ссылка на KeyType со значением (буквальное 8) который является недействительным. Из сообщений об ошибках ваш KeyType является int,

Либо удалите & от KeyType аргумент const версия, или сделать этот аргумент const,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]