c++ - QHash 问题

标签 c++ qt

我一直在尝试并试图让它工作,但它就是拒绝工作。我阅读了 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;

最佳答案

替换:

SDChatEmbed embedTest();

与:

SDChatEmbed embedTest;

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

SDChatEmbed (&)()

这是一个函数签名。

我认为您不需要明确的 QStringQString 以来第一个参数的转换/构造有一个接受 const char* 的构造函数, 以便自动转换。

(有关一些有趣的信息,请参阅 here。)

关于c++ - QHash 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672672/

相关文章:

c++ - 未处理的异常

c++ - 在具有特定值的元素之前的 std::vector 中插入一个元素

c++ - QTreeWidgetItem : How can I get the selected item?

c++ - 调用 Qt 的 setui 方法后是否应该检查空指针?

c++ - 在不连接按钮的情况下手动关闭 Modal QDialog - 代码完成后对话框挂起

qt - 在 JSON 中编码 QString

c++ - 如何在 C++ 中将输出精度设置为小数点后两位?

c++ - 在自定义源和 SmartTee 之间插入过滤器会泄漏 COM 对象

c++ - 如何优雅地将字符串从 ifstream 复制到 vector<string>?

c++ - Qt -"\n"不起作用,但 std::endl 可以吗?