2015-01-31 6 views
2

Я не могу использовать функцию вставки для станд :: tr1 :: unordered_map, я все время получаю следующее сообщение об ошибке при попытке построить:станд :: 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)); 

Я думал, может быть, это было связано с тем, что я использовал долго долго, как ключ, но даже после того, как изменения, что к междунар я получаю ту же ошибку. Есть предположения? Я не смог найти кого-либо еще с этой ошибкой в ​​любом месте в Интернете.

+0

Какой у вас компилятор? – Ram

+1

Просто FYI, причина использования функции 'std :: make_pair' заключается в том, что вам не нужно явно указывать типы (пусть вы выберете тип шаблона для вас). Вместо этого вы просто делаете 'book_by_id.insert (make_pair (ref_num, order));' –

+0

'tr1 :: unordered_map'? Сколько лет вашему компилятору? – Borgleader

ответ

1

Я думаю, проблема связана с моей версией gcc и отсутствием поддержки для C++ 11 (Mac OSX использует старую версию gcc по умолчанию, так как я оказался в этой ситуации). Я обновил свой gcc до 4.8 с помощью macports, установил его по умолчанию и создал новый проект с компилятором CrossGCC в соответствии с этими инструкциями: use c++11 on mac os x mountain lion with eclipse (Juno or Kepler). Я удалил tr1, и теперь я использую только #include <unordered_map>. Теперь у меня нет проблемы с использованием метода insert.

Спасибо всем за предложения.