我一直在尝试并试图让它工作,但它就是拒绝工作。我阅读了 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 (&)()
这是一个函数签名。
我认为您不需要明确的 QString
自 QString
以来第一个参数的转换/构造有一个接受 const char*
的构造函数, 以便自动转换。
(有关一些有趣的信息,请参阅 here。)
关于c++ - QHash 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672672/