我正在使用Qt,我想声明以下容器:
QMap<QUrl , QSet<ClassSharedPtr> > map;
这里ClassSharedPtr是类&#34;类&#34;的提升共享ptr。
typedef boost::shared_ptr<const Class> ClassPtr;
我在添加头文件#include:
后出现以下错误error: no matching function for call to ‘qHash(const boost::shared_ptr<const Class>&)’
答案 0 :(得分:0)
QSet
的值数据类型必须是可分配的数据类型。此外,类型必须提供operator==()
,并且类型命名空间中还必须有qHash()
函数,该函数返回值类型的参数的哈希值。
因此,您应该为qHash()
实施boost::shared_ptr<const Class>
函数。
namespace boost {
uint qHash(const boost::shared_ptr<const Class> &key, uint seed = 0)
{
const Class *ptr = key.get();
return uint(ptr) ^ seed;
}
}