Свои объекты в QSet |
Здравствуйте, гость ( Вход | Регистрация )
Свои объекты в QSet |
Andrewshkovskii |
22.11.2009, 2:01
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Цитата QSet's value data type must be an assignable data type. You cannot, for example, store a QWidget as a value; instead, store a QWidget *. In addition, the type must provide operator==(), and there must also be a global qHash() function that returns a hash value for an argument of the key's type. See the QHash documentation for a list of types supported by qHash(). Цитата The values stored in the various containers can be of any assignable data type. To qualify, a type must provide a default constructor, a copy constructor, and an assignment operator. This covers most data types you are likely to want to store in a container, including basic types such as int and double, pointer types, and Qt data types such as QString, QDate, and QTime, but it doesn't cover QObject or any QObject subclass (QWidget, QDialog, QTimer, etc.). If you attempt to instantiate a QList<QWidget>, the compiler will complain that QWidget's copy constructor and assignment operators are disabled. If you want to store these kinds of objects in a container, store them as pointers, for example as QList<QWidget *>. Я так понимаю, что для того, что бы можно было хранить свои объекты в сетах, необходимо что бы у объекта были определены : Оператор сравнения. Конструктор копирования. Конструктор по-умолчанию. И ..самое страшное, что бы была определена глобальная функция qHash для своего типа данных? Ну 3ое три то понятно, а вот насчет хэша?..это исходник QHash дописывать, что ли, придется? Вот пока что есть : Раскрывающийся текст
и реализация : Раскрывающийся текст
и тысячи ошибок от QSTL, но вот основные стопы в этом : Цитата C:/storage/programming/workspace/clusters/../../Qt/include/QtCore/../../src/corelib/tools/qhash.h:855: error: no matching function for call to 'qHash(const Cluster&)' Цитата C:/storage/programming/workspace/clusters/../../Qt/include/QtCore/../../src/corelib/tools/qhash.h:855: error: no matching function for call to 'qHash(const Cluster&) Почему-то вот для этой функции
' Так чтоже мне делать? писать qHash для своего объекта и что ещё? и ещё, вопрос из-за не достаточного знания C++, есть в этом классе такой метод :
Почему, когда я пытаюсь сделать вот так вот :
ribs это QVector <Cluster *>; то получаю
Что вообще обозначает данная ошибка? Просто мне в проверках условиях не нужно менять содержимое Set'ов объекта Cluster, а оно из-за возвращения не константной ссылки меняется.Можно конечно возвращать копию, но это расход памяти... Заранее спасибо.. Сообщение отредактировал Andrewshkovskii - 22.11.2009, 3:04 |
|
|
Andrewshkovskii |
22.11.2009, 14:13
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Видимо Ты немного не понял контекст, items() возвращает QSet<int>, в данном случае, это и будет пересечение одного множества на другое(левого с правым) и возвращение ссылки на измененное левое множество(вроде так).
А оператор &= ,насколько я помню, для стандартных типов выполняет либо присваение ссылки, либо адреса левой переменной от правой. |
|
|
Текстовая версия | Сейчас: 23.11.2024, 6:26 |