重载的'qHash(const double&)'的调用是不明确的
call of overloaded 'qHash(const double&)' is ambiguous
当我尝试将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 )
就足够了。
相关文章:
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 为什么调用不明确的 ctor 时没有编译时错误?
- G++ 错误:重载的"abs(无符号 int)"的调用不明确
- 如果存在具有不同参数的继承成员,为什么对 C++ 结构函数的调用不明确?
- 错误:重载'stoi(nlohmann::basic_json<>::value_type&)'的调用不明确
- 构建 castalia 时出错:重载函数的调用不明确
- 错误:重载的"abs(double)"调用不明确
- 结构构造函数调用不明确
- 错误:对重载函数的调用不明确
- 对重载'swap(char&, char&)'的调用不明确
- 对可变模板函数的调用不明确
- C++ 编译错误:重载的"<function_name>(char*&)"调用不明确
- VS2010中具有list_of的调用不明确
- 为什么这个运算符=调用不明确
- 为什么对重载函数的调用不明确
- C++中重载运算符函数对构造函数的调用不明确
- 为什么这些重载函数调用不明确
- 重载write(int)的调用不明确
- 带有重载r值引用函数的调用不明确
- 传递0而不是1时,sfinae调用不明确