2013-02-22 3 views
0

C++ Я следующее заявление в Key.hпочему пара не правильно создаются -

typedef uint64_t KeyHash; 

и в моем Finder классе, у меня есть C++ карту объявленных следующим образом:

std::map<std::pair<uint64_t, KeyHash>, Foo> table; 

Таким образом, , Я пытаюсь создать новую пару. Объект Foo имеет два поля, startKeyHash и foo_id, оба типа uint64_t:

std::pair<uint64_t, KeyHash> key (foo.foo_id, 
            foo.start_key_hash()); 
table[key] = tablet; 

функцию uint64_t Foo:start_key_hash() возвращающую startKeyHash. Однако, когда я компилирую мой код, я получаю следующее сообщение об ошибке:

error: no matching function for call to ‘std::pair<long unsigned int, long unsigned int>::pair(<unresolved overloaded function type>, google::protobuf::uint64)’ 
/usr/lib/gcc/x86_64-redhat-`linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_pair.h:111: note: 
candidates are: std::pair<_T1, _T2>::pair(_U1&&, _Arg0&&, _Args&& ...) [with _U1 = 
google::protobuf::uint64, _Args = , _T1 = long unsigned int, _T2 = long unsigned int]` 

Любые мысли?

ответ

4

Похоже, код, который вы вводите из Google, определяет тип uint64, и где-то вы случайно использовали это вместо uint64_t. Обратите внимание, что _t отсутствует.

+0

Это правда ... я должен отбрасывать из 'uint64' в' uint64_t'? – cybertextron

+1

Я бы исправил опечатку! –