【发布时间】:2014-01-02 15:32:33
【问题描述】:
我有以下带有unordered_map 成员的类,以及为pair<int,int> 定义的散列函数
class abc
{public :
unordered_map < pair<int,int> , int > rules ;
unsigned nodes;
unsigned packet ;
};
namespace std {
template <>
class hash < std::pair< int,int> >{
public :
size_t operator()(const pair< int, int> &x ) const
{
size_t h = std::hash<int>()(x.first) ^ std::hash<int>()(x.second);
return h ;
}
};
}
但我收到以下错误:
error: invalid use of incomplete type ‘struct std::hash<std::pair<int, int> >
error: declaration of ‘struct std::hash<std::pair<int, int> >
error: type ‘std::__detail::_Hashtable_ebo_helper<1, std::hash<std::pair<int, int> >, true>’ is not a direct base of ‘std::__detail::_Hash_code_base<std::pair<int, int>, std::pair<const std::pair<int, int>, int>, std::__detail::_Select1st, std::hash<std::pair<int, int> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, true>’
【问题讨论】:
-
你应该转发declate
template<typename T> class hash; -
@Rapptz:前向声明是不够的。 OP 需要在
class abc之前定义专业化。 -
@JesseGood 是的,我现在明白了。
-
如果两个程序员在同一个程序的两个组件中尝试这样做会发生什么?
标签: c++ c++11 hash stl unordered-map