我有这样的课程
hash
我想强制所有继承的类实现hashcode
计算,并提供使用已实现的方法获取()
以覆盖hash
结构中的Symbol 'hash' could not be resolved
的能力。
但是我的编译器显示Eclipse c++
错误。
我正在使用CDT
与TDM gcc 5.1.0
插件和{{1}}。有什么问题?
答案 0 :(得分:1)
如果您想为std::hash
Object
添加明确的专业化,正确的做法是:
namespace core {
class Object { ... };
}
namespace std {
template <>
struct hash<core::Object> {
size_t operator()(const core::Object& x) const {
return x.hashCode(); // though to make this work,
// hashCode() should be const
}
};
}
显式特化必须在命名空间范围内 - 具体在std
的范围内。并且你只能使virtual
函数纯净(= 0
),这个函数不应该是虚拟的或纯粹的。
旁注,您的_OBJECT_H
包含警卫是reserved identifier。你应该选择另一个。