我无法对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也会得到相同的错误。有什么想法吗?我无法在网上找到任何有此错误的人。
答案 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方法没有问题。
感谢大家的建议。