为什么没有正确创建一对 - C ++

时间:2013-02-22 18:41:19

标签: c++ map

我在Key.h

中有以下声明
typedef uint64_t KeyHash;

在我的Finder课程中,我将C++地图声明如下:

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

因此,我正在尝试创建一对新的。 Foo对象有两个字段startKeyHashfoo_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]`

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

看起来您从Google引入的代码定义了uint64类型,而您偶然使用的代码而不是uint64_t。请注意,_t缺失。