У меня есть общий объект карты.
Я хочу перегрузить оператор [] так 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'
Сообщение об ошибке о неоднозначности отражает ваш компилятор, учитывая оба ваших operator[]()
в качестве возможных кандидатов для соответствия map5[8]
, Оба кандидата одинаково хороши (или плохи, в зависимости от того, как вы на это смотрите).
Затем на-const
версия неверна, потому что map5
является const
,
const
версия требует инициализации неconst
ссылка на KeyType
со значением (буквальное 8
) который является недействительным. Из сообщений об ошибках ваш KeyType
является int
,
Либо удалите &
от KeyType
аргумент const
версия, или сделать этот аргумент const
,
Других решений пока нет …