首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSet追加自定义对象

QSet追加自定义对象
EN

Stack Overflow用户
提问于 2021-02-17 21:38:15
回答 1查看 125关注 0票数 0

我有下面的课程

代码语言:javascript
复制
class Test{
    int a;
    int b;
};

我想要的就是有一个

我将在其中插入一些Test对象。

代码语言:javascript
复制
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。

你们中有谁知道我该怎么解决这个问题吗?

更新:

代码语言:javascript
复制
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”类型的左值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 21:48:45

被实现为

,因此您必须实现

在您的类中,并使用

函数位于与您的类相同的命名空间中。

它会使全局

并且可以拥有这些签名中的一个

代码语言:javascript
复制
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

我在这里链接它是为了完整性,但它并不清楚这个要求。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66243049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档