Итак, у меня есть структура:
struct Alarm{
Alarm(QString operation, double comparison, QString text, quint8 color):
operation(operation), comparison(comparison), text(text), color(color){}
int element;
QString operation;
double comparison;
QString text;
quint8 color;
QDateTime riseTime;
};
Обратите внимание, что у него нет конструктора по умолчанию Alarm()
.Я хотел бы иметь векторный контейнер объектов этой структуры.Если я пытаюсь использовать QVector
, код не компилируется в коде, где я пытаюсь добавить новый объект с этой ошибкой:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h: In instantiation of ‘void QVector<T>::defaultConstruct(T*, T*) [with T = Alarm]’:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h:580:41: required from ‘void QVector<T>::reallocData(int, int, QArrayData::AllocationOptions) [with T = Alarm; QArrayData::AllocationOptions = QFlags<QArrayData::AllocationOption>]’
/usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h:654:20: required from ‘void QVector<T>::append(const T&) [with T = Alarm]’
/usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h:280:13: required from ‘QVector<T>& QVector<T>::operator<<(const T&) [with T = Alarm]’
/opt/buildagent/work/1a89dfc8903ef3d7/ground/gcs/src/plugins/qmlview/Alarms.cpp:56:243: required from here
/usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h:322:13: error: no matching function for call to ‘Alarm::Alarm()’
new (from++) T();
Похоже, что QVector
требует, чтобы класс, который он содержит, имелконструктор по умолчанию.Однако, использование std::vector<T>
компилирует просто отлично.
Мой вопрос - почему?Требуется ли для использования QVector иметь класс с конструктором по умолчанию?Или я не правильно использую контейнер?