重载的'qHash(const double&)'的调用是不明确的

call of overloaded 'qHash(const double&)' is ambiguous

本文关键字:调用 不明确 qHash 重载 const double      更新时间:2023-10-16

当我尝试将QList转换为QSet时,我得到这个错误。

QList<double> x_pts;
x_pts << 4.1;
x_pts << 2.2;
x_pts << 2.2;
x_pts << 1.3;
qSort(x_pts);
QSet<double> list = x_pts.toSet();

知道为什么我得到这个错误吗?如果将类型更改为int或double*,则可以正常工作。但是double也可以。

所有我想做的是从我的列表中删除重复的。我想找到一种不用自己迭代列表的方法。

如果您能帮助删除此错误或使用其他函数删除重复项,我们将不胜感激。

谢谢,

编译器错误是由于Qt根本没有定义一个qHash()函数接受双精度。这样做的原因是,在散列中使用浮点数作为键通常不是一个好主意(在这种情况下,您的QSet在内部使用散列)。

你说你正在尝试删除重复项,但是在c++中浮点数之间相等的概念是模糊的,因为事实证明很难说任何两个浮点数是真正相等的。

(参见c++常见问题解答)

你的问题的解决方案将是:

a)不要使用浮点数

b)定义您自己的qHash函数,以一种令人满意的方式满足您的程序的需求。在您的实现文件中定义一个qHash( double )就足够了。