标准::TR1::unordered_map插入错误

std::tr1::unordered_map insert error

本文关键字:插入 错误 map unordered TR1 标准      更新时间:2023-10-16

我无法对 std::tr1::unordered_map 使用插入函数,我在尝试构建时不断收到以下错误:

/usr/include/c++/4.2.1/tr1/hashtable:855:14: error: cannot initialize return object of type '_Node *' (aka '_Hash_node<std::pair<const unsigned long long, Order>, false> *') with an rvalue of type 'bool'
      return false;
         ^~~~~

我的精简代码如下:

#include <tr1/unordered_map>
#include "handler.h"
#include "endian_tools.h"
using namespace std::tr1;
using namespace std;
unordered_map<uint64_t, Order> book_by_id;
uint64_t ref_num = be64toh(msg);
Order order(ref_num);
book_by_id.insert(make_pair<uint64_t,Order>(ref_num, order));

我想这可能与我使用长长作为键的事实有关,但即使在将其更改为 int 后,我也会收到相同的错误。有什么想法吗?我无法在网上任何地方找到其他有此错误的人。

我认为问题出在我的 gcc 版本及其对 C++11 的支持方面(Mac OSX 默认使用旧的 gcc 版本,这就是我在这种情况下结束的原因)。我使用 macports 将 gcc 升级到 4.8,将其设置为默认值,并根据以下说明使用 CrossGCC 编译器创建了一个新项目:在 mac os x 带有日食的美洲狮(Juno 或 Kepler)上使用 c++11。我删除了tr1,现在只使用#include <unordered_map>.现在我使用插入方法没有问题。

谢谢大家的建议。