std :: tr1 :: unordered_map插入错误

时间:2015-01-31 23:06:13

标签: c++ unordered-map tr1

我无法对std :: tr1 :: unordered_map使用insert函数,在尝试构建时我一直收到以下错误:

/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));

我想也许这与我使用long long作为密钥的事实有关,但即使将其更改为int也会得到相同的错误。有什么想法吗?我无法在网上找到任何有此错误的人。

1 个答案:

答案 0 :(得分:1)

我认为问题出在我的gcc版本和缺乏对C ++ 11的支持上(Mac OSX默认使用旧的gcc版本,这就是我在这种情况下的结果)。我使用macport将gcc升级到4.8,将其设置为默认值,并根据这些说明使用CrossGCC编译器创建了一个新项目:use c++11 on mac os x mountain lion with eclipse (Juno or Kepler)。我删除了tr1,现在只使用#include <unordered_map>。现在我使用insert方法没有问题。

感谢大家的建议。