我正在尝试编译MSVC ++ 10上的解决方案和项目,这些解决方案和项目在MSVC ++ 9中运行良好,我遇到了麻烦,主要是收到以下消息:
错误C2888: 'std :: hash':无法在命名空间'tr1'中定义符号
以下代码:
namespace std {
namespace tr1 {
template <>
struct hash< Rubedo::eChannelFamily >
{
std::size_t operator()( const Rubedo::eChannelFamily& Key ) const
{
return ( int ) Key;
}
};
}}
如果我可以做以下其中一项,我将非常高兴:
我该怎么做? 非常感谢你提前。
答案 0 :(得分:3)
hash
位于VS2010的名称空间std
中,因为它是C ++ 0x标准库的一部分,而不是std::tr1
。只需删除tr1部分,编译器就可以了。
template<> class std::hash< Rubedo::eChannelFamily >>
: public std::unary_function<const Rubedo::eChannelFamily, size_t>
{
public:
size_t operator()(const Rubedo::eChannelFamily& ref) const {
return ( int ) ref;
}
};
这是对我自己的类型的哈希的一个相当简单的修改,它成功编译。
答案 1 :(得分:1)
您必须继承这样的unary_function
并且不再需要tr1
,
namespace std
{
template <>
struct hash<Rubedo::eChannelFamily> : public unary_function<Rubedo::eChannelFamily, size_t>
{
size_t operator()(const Rubedo::eChannelFamily& key) const
{
return (size_t) key;
}
};
}