Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не работает Qhash с структура
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
phpCoder
Добрый день.
Qt опять тупит...

Значится есть в .h файле структура:
struct OrdersFields
{
    QString label;
    int width;
    bool isEditable;
    int index;
    OrdersFields(const QString &label, int width, bool isEditable = false) : label(label), width(width), isEditable(isEditable), index(0) {}
};


В приватной секции класса:
QHash<QString, OrdersFields> _ordersFields;


В реализации:
...
this->_ordersFields["Status"] = OrdersFields("Статус",120,true);
...

На этой строчке начинаются проблемы:

D:\Soft\Qt\5.4\mingw491_32\include\QtCore\qhash.h:756: ошибка: no matching function for call to 'OrdersFields::OrdersFields()'
return createNode(h, akey, T(), node)->value;
^
D:\Soft\Qt\5.4\mingw491_32\include\QtCore\qhash.h:756: candidates are:
D:\Documents\Qt\project\project\OrdersEdit.cpp:1: In file included from ..\project\OrdersEdit.cpp:1:0:
D:\Documents\Qt\project\project\OrdersEdit.h:24: OrdersFields::OrdersFields(const QString&, int, bool)
OrdersFields(const QString &label, int width, bool isEditable = false) : label(label), width(width), isEditable(isEditable), index(0) {}
^
D:\Documents\Qt\project\project\OrdersEdit.h:24: note: candidate expects 3 arguments, 0 provided
D:\Documents\Qt\project\project\OrdersEdit.h:18: OrdersFields::OrdersFields(const OrdersFields&)
struct OrdersFields
^
D:\Documents\Qt\project\project\OrdersEdit.h:18: note: candidate expects 1 argument, 0 provided

Что тут можно поделать?

А вот если использовать Qlist, то никаких ошибок нет...

Может Qhash и Qmap - это мусор?...
lanz
Цитата
Что тут можно поделать?

В общем то он все написал в тексте ошибки.

Давайте разберемся:
this->_ordersFields["Status"]

Здесь вы создаете новый элемент, потому что:
Цитата
If the hash contains no item with the key, the function inserts a default-constructed value into the hash with the key, and returns a reference to it.

Соответственно он жалуется, на то что у вашего класса нет конструктора без параметров, который бы позволил ему создать это значение.
Заведите такой конструктор, либо задайте все значения по умолчанию.

С QList нет таких проблем потому что он хранит указатели, и использует автоматически сгенерированный конструктор копирования.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.