1

我希望这个问题可以在没有看到代码的情况下回答,因为我非常不清楚问题出在哪里。我operator[]在 Boost 无序映射上使用来查找键并返回它映射到的向量。这是在赋值语句的 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&);
                     ^
4

1 回答 1

3

问题是有问题的运算符 is not 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&)方法。

于 2013-07-06T17:31:41.647 回答