我有下面的课程
class Test{
int a;
int b;
};我想要的就是有一个
我将在其中插入一些Test对象。
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QSet setTest;
setTest.insert(Test());
return QCoreApplication::exec();
}问题是,由于某种原因,我得到了下面的错误,我不知道为什么,也不知道如何修复它。
C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(118):错误C2665:'qHash':24个重载都无法转换所有参数类型C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qlocale.h(62):注意:可以是'uint qHash(const QLocale &,uint) noexcept‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qregexp.h(56):注意:或者
'uint qHash(const QRegExp &,uint)无异常‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(108):注意: or 'uint qHash(std::nullptr
_
t,uint)无异常‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(105):备注: or 'uint qHash(QLatin1String,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(104):注意: or 'uint qHash(const QBitArray &,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(103):备注: or 'uint qHash(QStringView,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(101):注意: or 'uint qHash(const QStringRef &,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(100):注意: or 'uint qHash(const QString &,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(98):注意: or 'uint qHash(const QByteArray &,uint) 98‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(97):注意: or 'uint qHash(const QChar,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(95):注意: or 'uint qHash(long double,uint) noexcept‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(93):注意: or 'uint qHash(double,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(92):注意: or 'uint qHash(float,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(91):备注: or 'uint qHash(qint64,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(87):注意: or 'uint qHash(quint64,uint) noexcept‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(86):注意: or 'uint qHash(long,uint) 86‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(80):注意: or 'uint qHash(ulong,uint) 80‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(79):注意: or 'uint qHash(int,uint) 79‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(78):注意: or 'uint qHash(uint,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(77):备注: or 'uint qHash(short,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(76):备注: or 'uint qHash(ushort,uint) 76‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(75):备注: or 'uint qHash(signed char,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(74):备注: or 'uint qHash(uchar,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(73):注意: or 'uint qHash(char,uint) Qt‘C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(118):注意:尝试将参数列表'(const T)‘与
T=Test
C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(117):注意:参见使用编译的函数模板实例化'uint qHash(const T &,uint) noexcept()‘的引用
Key=Test,T=Test
C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhash.h(946):注意:编译类模板成员函数'QHashNode‘时
*
*
QHash::findNode(const Key &,uint
*
) const‘with
Key=Test,T=QHashDummyValue
C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhash.h(790):注意:参见reference to function template instantiation 'QHashNode
*
*
QHash::findNode(const Key &,uint
*
) const‘正在使用编译
Key=Test,T=QHashDummyValue
C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhash.h(786):注意:编译类模板成员函数'QHash::iterator QHash::insert(const Key &,const QHashDummyValue &)‘时
T=Test,Key=Test
C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qset.h(208):注意:参见使用编译的函数模板实例化'QHash::iterator QHash::insert(const Key &,const QHashDummyValue &)‘的参考
T=Test,Key=Test
C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qset.h(257):注意:请参阅使用编译的类模板实例化'QHash‘的引用
T=Test
C:\Users\vlad.dumitru\CLionProjects\Test\main.cpp(11):注意:参见正在编译的类模板实例化'QSet‘的引用C:\Qt\5.14.2\msvc2017
_
64\include\QtCore/qhashfunctions.h(118):错误核心:非法表达式NMAKE :致命错误C2056:'C:\PROGRA~2\MICROS~2\2017\BUILDT~1\VC\Tools\MSVC\1416~1.270\bin\Hostx64\x64\cl.exe‘:返回代码'0x2’U1077。Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe"‘:致命错误U1077:'"C:\Program Files (x86)\Microsoft Visual NMAKE :返回代码'0x2’Stop。Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe"‘:致命错误U1077:'"C:\Program Files (x86)\Microsoft Visual NMAKE :返回代码'0x2’Stop。Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe"‘:致命错误U1077:'"C:\Program Files (x86)\Microsoft Visual NMAKE :返回代码'0x2’Stop。
你们中有谁知道我该怎么解决这个问题吗?
更新:
class Test {
int a;
int b;
bool operator==(const Test &e1) const {
return e1.a == a && e1.b == b;
}
uint qHash(const Test &key, uint seed) {
return qHash(key.a, seed) ^ key.b;
}
};我确实写了我需要的两个函数,但是现在我得到了一个新的错误:
错误C2664:'uint Test::qHash(const Test &,uint)':无法将参数1从'const int‘转换为'const Test &’
我不能调用
因为“
对“const Test”类型的引用未能绑定到“const int”类型的左值
“
发布于 2021-02-17 21:48:45
被实现为
,因此您必须实现
在您的类中,并使用
函数位于与您的类相同的命名空间中。
它会使全局
并且可以拥有这些签名中的一个
uint qHash(K key);
uint qHash(const K &key);
uint qHash(K key, uint seed);
uint qHash(const K &key, uint seed);Qtherwise
将无法对您的数据进行哈希处理。
您可以在这里查看官方示例
https://doc.qt.io/qt-5/qhash.html#qhash
这是关于以下内容的文档页面
https://doc.qt.io/qt-5/qset.html#details
我在这里链接它是为了完整性,但它并不清楚这个要求。
https://stackoverflow.com/questions/66243049
复制相似问题