Название: [РЕШЕНО] QHash<std::pair<std::string, std::string>, int> hash как скомпилить? Отправлено: vintik от Май 05, 2013, 21:22 Всем привет!
Не могу понять как скомпилить сабж, может знает кто? Почему не юзаю QHash<QPair<QString, QString>, int> - требование к интерфейсу. код примерно такой в some_class.h Код: template <typename T1, typename T2> inline uint qHash(const std::pair<T1, T2> &key) При попытке инсерта Код: hash_.insert(std::make_pair("xxx", "yyy"), 10); в момент компиляции получаю такую ошибку /usr/include/qt4/QtCore/qhash.h:880:24: error: no matching function for call to ‘qHash(const std::pair<std::basic_string<char>, std::basic_string<char> >&)’ /usr/include/qt4/QtCore/qhash.h:880:24: note: candidates are: <bla-bla-bla> Решение подсказал alex312 - функция генерящая хэш, должна быть объявлена до включения заголовка QHash Примерно так: Код: template <typename T1, typename T2> inline uint qHash(const std::pair<T1, T2> &key); Кстати, тут важно отметить, что для компиляции я использовал g++4.7. В visual studio, где код компилился позднее, такой проблемы не обнаружилось. Вероятно, дело в том что их компилятор чуть более лоялен. Название: Re: QHash<std::pair<std::string, std::string>, int> hash как скомпилить? Отправлено: VPS от Май 05, 2013, 22:09 Вот из документации:
The key type of a QHash must provide operator==() and a global hash function called qHash() (see the related non-member functions). Соответственно компилятор говорит, что не знает глобальной функции "qHash" с типом "std::pair"... Название: Re: QHash<std::pair<std::string, std::string>, int> hash как скомпилить? Отправлено: vintik от Май 05, 2013, 22:22 Вот из документации: The key type of a QHash must provide operator==() and a global hash function called qHash() (see the related non-member functions). Соответственно компилятор говорит, что не знает глобальной функции "qHash" с типом "std::pair"... Поэтому её надо реализовать самому. ну так в приведённом мной примере есть эта самая функция Название: Re: QHash<std::pair<std::string, std::string>, int> hash как скомпилить? Отправлено: alex312 от Май 05, 2013, 22:32 ну так в приведённом мной примере есть эта самая функция эта функция должна быть обьявлена до включения заголовка QHashНазвание: Re: QHash<std::pair<std::string, std::string>, int> hash как скомпилить? Отправлено: vintik от Май 05, 2013, 23:29 ну так в приведённом мной примере есть эта самая функция эта функция должна быть обьявлена до включения заголовка QHashТвоя правда, спасибо! Вопрос решён |