0

我有通用地图对象。我想重载 operator[] 所以map[key]返回键的值。我制作了两个版本的下标运算符。

非常量:

ValueType& operator[](KeyType key){

常量:

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'   
4

1 回答 1

0

关于歧义的错误消息反映了您的编译器考虑到您operator[]()可能匹配的两个候选者map5[8]。两位候选人都同样好(或坏,取决于你如何看待它)。

const版本无效,因为map5is const

该版本需要使用无效的右值(文字)const初始化非const引用。从错误消息中,您是.KeyType8KeyTypeint

&从版本的KeyType参数中删除const,或使该参数const

于 2016-01-16T11:05:12.053 回答