Issue with QHash

Issue with QHash

本文关键字:QHash with Issue      更新时间:2023-10-16

我一直在努力让这个工作,但它只是拒绝工作。我读了QT文档,我只是无法得到插入函数的功能。当我构建时,我得到以下复杂错误

/home/mmanley/projects/StreamDesk/libstreamdesk/SDDatabase.cpp: In constructor 'SDDatabase::SDDatabase()':
/home/mmanley/projects/StreamDesk/libstreamdesk/SDDatabase.cpp:27:44: error: no matching function for call to 'QHash<QString, SDChatEmbed>::insert(const char [9], SDChatEmbed (&)())'
/usr/include/qt4/QtCore/qhash.h:751:52: note: candidate is: QHash<Key, T>::iterator         QHash<Key, T>::insert(const Key&, const T&) [with Key = QString, T = SDChatEmbed]
make[2]: *** [libstreamdesk/CMakeFiles/streamdesk.dir/SDDatabase.cpp.o] Error 1
make[1]: *** [libstreamdesk/CMakeFiles/streamdesk.dir/all] Error 2

头文件:

class SDStreamEmbed {
        Q_OBJECT
    public:
        SDStreamEmbed();
        SDStreamEmbed(const SDStreamEmbed &other);
        QString FriendlyName() const;
        SDStreamEmbed &operator=(const SDStreamEmbed &other) {return *this;}
        bool operator==(const SDStreamEmbed &other) const {return friendlyName == other.friendlyName;}
    private:
        QString friendlyName;
};
Q_DECLARE_METATYPE(SDStreamEmbed)
inline uint qHash(const SDStreamEmbed &key) {
    return qHash(key.FriendlyName());
}

和实现

SDStreamEmbed::SDStreamEmbed() {
}
SDStreamEmbed::SDStreamEmbed(const SDStreamEmbed& other) {
}
QString SDStreamEmbed::FriendlyName() const {
    return friendlyName;
}

和我如何调用它

SDChatEmbed embedTest();
ChatEmbeds.insert("DemoTest", embedTest);

和ChatEmbeds的定义

QHash<QString, SDStreamEmbed> StreamEmbeds;

Replace:

SDChatEmbed embedTest();

:

SDChatEmbed embedTest;

编译器将第一行解释为函数声明。这在错误消息中是可见的:它为第二个参数推断出以下类型:

SDChatEmbed (&)()

这是一个函数签名

我不认为你需要为第一个参数显式的QString强制转换/构造,因为QString有一个接受const char*的构造函数,因此应该自动转换。