【问题标题】:call of overloaded 'qHash(const double&)' is ambiguous重载 'qHash(const double&)' 的调用不明确
【发布时间】:2011-10-06 23:55:05
【问题描述】:

当我尝试将 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版本吗?这看起来像一个 Qt 错误。

标签: c++ qt qlist


【解决方案1】:

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

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

(见the C++ faq regarding this subject

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

a) 不要使用浮点数

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

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2011-06-08
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多