首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QHash的问题

QHash的问题
EN

Stack Overflow用户
提问于 2011-10-06 17:49:25
回答 1查看 1.5K关注 0票数 0

我一直试着让它工作,但它就是拒绝工作。我阅读了QT文档,但我就是不能让插入函数发挥作用。当我构建时,我得到了以下复杂化的错误

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

下面是头文件:

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

和实现

代码语言:javascript
复制
SDStreamEmbed::SDStreamEmbed() {

}

SDStreamEmbed::SDStreamEmbed(const SDStreamEmbed& other) {

}

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

以及我如何调用它

代码语言:javascript
复制
SDChatEmbed embedTest();
ChatEmbeds.insert("DemoTest", embedTest);

以及ChatEmbeds的定义

代码语言:javascript
复制
QHash<QString, SDStreamEmbed> StreamEmbeds;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-06 17:56:53

替换:

代码语言:javascript
复制
SDChatEmbed embedTest();

通过以下方式:

代码语言:javascript
复制
SDChatEmbed embedTest;

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

代码语言:javascript
复制
SDChatEmbed (&)()

这是一个函数签名。

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

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

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

https://stackoverflow.com/questions/7672672

复制
相关文章

相似问题

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