gpt4 book ai didi

c++ - 重载 'qHash(const double&)' 的调用不明确

转载 作者:行者123 更新时间:2023-11-30 02:07:34 25 4
gpt4 key购买 nike

当我尝试将 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 根本没有定义接受 double 值的 qHash() 函数。这样做的原因是,使用 float 作为散列中的键通常不是一个好主意(在这种情况下,您的 QSet 在内部使用散列)。

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

(参见 the C++ faq regarding this subject)

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

a) 不要使用 float

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

关于c++ - 重载 'qHash(const double&)' 的调用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com