crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Не работает Qhash с структура
phpCoder
  опции профиля:
сообщение 1.1.2015, 13:05
Сообщение #1


Студент
*

Группа: Неактивирован
Сообщений: 16
Регистрация: 2.12.2014
Пользователь №: 4289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день.
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
  опции профиля:
сообщение 2.1.2015, 22:11
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


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

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

Давайте разберемся:
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 нет таких проблем потому что он хранит указатели, и использует автоматически сгенерированный конструктор копирования.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 3:16