Название: Проблема с qHash [решено] Отправлено: Igors от Май 03, 2019, 15:05 Добрый день
"Элементарный" пример Код Все работает, нема квешнзов. Теперь раскомментируем третью строку - текст из #ifndef теперь в хедере (zip приаттачен). Хирак - шланг теперь не находит qHash(const std::string &). Конечно если поместить инклуд после этой ф-ции - все норм, но елы-палы.. Какого <> он щемится до "инстанциации"? Почему считает что в хедере все должно быть известно? Ну объявлена нужная ф-ция позже, но ведь до инстанциации и в той же единице трансляции. Или как? Гребаная темплейтщина :'( Название: Re: Проблема с qHash Отправлено: Авварон от Май 03, 2019, 15:16 Я на это тоже натыкался, как раз проблема, имхо, в том, что qHash НЕ темплейтная. То есть у вас все оверлоады должны быть включены ДО класса QHash
Название: Re: Проблема с qHash Отправлено: ssoft от Май 03, 2019, 16:19 Это известный существенный косяк в архитектуре QHash. Хеш функция объявлена, как функция, а не как специализация класса hash (https://ru.cppreference.com/w/cpp/utility/hash).
Поэтому функция qHash должна быть объявлена ДО включения заголовка QHash. Название: Re: Проблема с qHash Отправлено: Igors от Май 04, 2019, 11:02 Да, вот еще более простой (или вызывающий) пример
Код Не компилится. Придется выносить qHash в хедер и включать "до того". Оказывается надо было делать спецификацией Код Но что тогда писать до спецификации Код: template<class T> Спасибо Название: Re: Проблема с qHash Отправлено: Igors от Май 04, 2019, 11:20 Ага, понял - ничего, достаточно описания. Вот полный текст
хедер Код cpp файл Код
Название: Re: Проблема с qHash [решено] Отправлено: Авварон от Май 04, 2019, 11:45 Неплохо кстати!
|