Всем привет!
Не могу понять как скомпилить сабж, может знает кто?
Почему не юзаю QHash<QPair<QString, QString>, int> - требование к интерфейсу.
код примерно такой в some_class.h
template <typename T1, typename T2> inline uint qHash(const std::pair<T1, T2> &key)
{
return qHash("unique-bla-bla-bla");
}
class some_class
{
QHash<std::pair<std::string, std::string>, int> hash_;
};
При попытке инсерта
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);
#include <QHash>
template <typename T1, typename T2> inline uint qHash(const std::pair<T1, T2> &key)
{
return qHash("unique-bla-bla-bla");
}
Кстати, тут важно отметить, что для компиляции я использовал g++4.7.
В visual studio, где код компилился позднее, такой проблемы не обнаружилось. Вероятно, дело в том что их компилятор чуть более лоялен.