0

我正在使用 Qt,我想声明以下容器:

QMap<QUrl , QSet<ClassSharedPtr> > map;

这里的 ClassSharedPtr 是类“Class”的 boost 共享 ptr。

typedef boost::shared_ptr<const Class> ClassPtr;

添加头文件 #include 后出现以下错误:

error: no matching function for call to ‘qHash(const boost::shared_ptr<const Class>&)’
4

1 回答 1

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;
}

}
于 2015-10-20T09:14:36.043 回答