我有通用的地图对象。
我想重载operator [],所以map[key]
返回键的值。
我制作了两个版本的下标运算符。
非常数:
ValueType& operator[](KeyType key){
const:
const ValueType& operator[]( KeyType& key) const{
非const版本工作正常但是当我创建const Map时我遇到了问题。 我写的主要是:
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 :(得分:0)
有关歧义的错误消息反映了您的编译器将operator[]()
作为匹配map5[8]
的候选对象。两个候选人都同样好(或者不好,取决于你如何看待它)。
非const
版本无效,因为map5
为const
。
const
版本要求使用无效的右值(文字const
)初始化对KeyType
的非8
引用。根据错误消息,您的KeyType
为int
。
从&
版本的KeyType
参数中删除const
,或者将该参数设为const
。