Проблема с QHash - PullRequest
       4

Проблема с QHash

0 голосов
/ 06 октября 2011

Я пытался и пытаюсь заставить это работать, но оно просто отказывается работать. Я прочитал документацию по 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;

1 Ответ

3 голосов
/ 06 октября 2011

Заменить:

SDChatEmbed embedTest();

с:

SDChatEmbed embedTest;

Компилятор интерпретирует первую строку как объявление функции. Это видно из сообщения об ошибке: для второго аргумента выводится следующий тип:

SDChatEmbed (&)()

и это подпись функции.

Я не думаю, что вам нужно явное QString приведение / конструирование для первого аргумента, поскольку QString имеет конструктор, который принимает const char*, так что он должен конвертироваться автоматически.

(см. здесь для некоторой интересной информации.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...