我希望这个问题在没有看到代码的情况下是可以回答的,因为我不清楚问题所在。我在Boost无序映射上使用operator[]
来查找键并返回它映射到的向量。这是在赋值语句的RHS上,但我得到的错误似乎暗示operator[]
不保证constness。我刚刚开始尝试学习const
- 正确性。有人可以解码此错误并指导我解决问题是什么?或者询问更多细节?
编译器 Apple LLVM版本4.2(clang-425.0.28)
Block.cpp:89:39: error: no viable overloaded operator[] for type 'const Record_map' (aka 'const unordered_map<Typecode, FV_pair_vec>')
FV_pair_vec const fv_vec = records[rec_type];
~~~~~~~^~~~~~~~~
/usr/local/include/boost/unordered/unordered_map.hpp:420:22: note: candidate function not viable: 'this' argument has type 'const Record_map'
(aka 'const unordered_map<Typecode, FV_pair_vec>'), but method is not marked const
mapped_type& operator[](const key_type&);
^
答案 0 :(得分:3)
问题是有问题的运算符不是const
,也就是说,无法在const
个对象上调用它,或者通过const
引用调用它。提供const
版本的替代方法是at(key_type const&)
,如果具有该关键元素的元素不在地图中,则会引发异常。所以你可以使用
mapped_type x = theMap.at(theKey);
而不是
mapped_type x = theMap[theKey];
否则,请使用unordered_map::find(key_type const&)
方法。