etc:blog:q_multi_hash_map_qsharedpointer
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
etc:blog:q_multi_hash_map_qsharedpointer [2011/01/27 20:41] – vood | etc:blog:q_multi_hash_map_qsharedpointer [2011/01/27 21:30] (current) – kkv | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== QMultiMap+QSharedPointer ====== | + | ====== |
Line 5: | Line 5: | ||
==== Введение ==== | ==== Введение ==== | ||
Библиотека Qt предоставляет множество удобных средств для разработки приложений, | Библиотека Qt предоставляет множество удобных средств для разработки приложений, | ||
- | |||
- | |||
- | |||
- | |||
- | |||
==== Проблема ==== | ==== Проблема ==== | ||
- | Впервые с данной проблемой я столкнулся, | + | Впервые с данной проблемой я столкнулся, |
- | < | + | < |
- | uniqueKeys() | + | In file included from / |
+ | from / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
</ | </ | ||
- | класса QMultiMap, у которого в качестве типа для ключевых значений был использован тип | + | Больше всех настораживало сообщение |
+ | <code bash> | ||
+ | / | ||
+ | </ | ||
+ | так как сигнатура функиции uniqueKeys должна выглядеть иначе. | ||
+ | |||
+ | Дальнейшие изыскания позволили выяснить, что проблема заключалась в использовании | ||
Рассмотрим небольшой пример, | Рассмотрим небольшой пример, | ||
- | + | < | |
- | < | + | |
#include < | #include < | ||
#include < | #include < | ||
Line 44: | Line 53: | ||
Если мы попытаемся скомпилировать данный пример, | Если мы попытаемся скомпилировать данный пример, | ||
- | < | + | < |
In file included from / | In file included from / | ||
from main.cpp:2: | from main.cpp:2: | ||
- | / | + | / |
main.cpp: | main.cpp: | ||
- | / | + | / |
/ | / | ||
/ | / | ||
Line 58: | Line 67: | ||
/ | / | ||
/ | / | ||
- | / | + | / |
- | / | + | / |
- | / | + | / |
- | / | + | / |
main.cpp: | main.cpp: | ||
- | / | + | / |
/ | / | ||
/ | / | ||
Line 81: | Line 90: | ||
из-за которой и происходит сбой компиляции. Вот так выглядит ее прототип в документации Qt [[http:// | из-за которой и происходит сбой компиляции. Вот так выглядит ее прототип в документации Qt [[http:// | ||
<code text> | <code text> | ||
- | Очевидно, | + | |
+ | Очевидно, | ||
Обратимся к описанию данной функции. Исходя из документации она возвращает список всех ключей в QMultiMap в порядке возрастания. Логично предположить, | Обратимся к описанию данной функции. Исходя из документации она возвращает список всех ключей в QMultiMap в порядке возрастания. Логично предположить, | ||
Определим свой оператор сравнения следующим образом: | Определим свой оператор сравнения следующим образом: | ||
- | < | + | |
+ | < | ||
template <class T> | template <class T> | ||
bool operator < | bool operator < | ||
Line 90: | Line 101: | ||
} | } | ||
</ | </ | ||
+ | |||
Если включить код данного оператора в код примера, | Если включить код данного оператора в код примера, | ||
Проблема, | Проблема, | ||
- | < | + | < |
template <class T> | template <class T> | ||
uint qHash(const QSharedPointer< | uint qHash(const QSharedPointer< | ||
Line 100: | Line 112: | ||
==== Заключение ==== | ==== Заключение ==== | ||
+ | |||
+ | Очевидно, | ||
Описанная проблема устранена в новой версии Qt 4.7, которая входит в состав Qt SDK 1.1. Однако предложенное здесь решение остается актуальным, | Описанная проблема устранена в новой версии Qt 4.7, которая входит в состав Qt SDK 1.1. Однако предложенное здесь решение остается актуальным, | ||
- | {{tag>}} | + | {{tag>qt ovi QMultiMap QSharedPointer}} |
~~DISCUSSION~~ | ~~DISCUSSION~~ | ||
etc/blog/q_multi_hash_map_qsharedpointer.txt · Last modified: 2011/01/27 21:30 by kkv