Название: Почему некоторые классы не хотят быть базовым типом массивов? Отправлено: fulkabaster от Март 22, 2010, 19:39 Например, юзая графики из библиотеки QWT, хочу создать кучку маркеров для подписей. Чтобы не создавать их десятками вручную, делаю массив типа QVector<QwtPlotMarker>. Но при компиляции выдается такое:
Цитировать ../qwt/qwt-5.2.0/src/qwt_plot_item.h: In copy constructor ‘QwtPlotMarker::QwtPlotMarker(const QwtPlotMarker&)’: ../qwt/qwt-5.2.0/src/qwt_plot_marker.h:46: instantiated from ‘void QVector<T>::realloc(int, int) [with T = QwtPlotMarker]’ /usr/include/QtCore/qvector.h:303: instantiated from ‘void QVector<T>::resize(int) [with T = QwtPlotMarker]’ chargaff.cpp:107: instantiated from here ../qwt/qwt-5.2.0/src/qwt_plot_item.h:192: error: ‘QwtPlotItem::QwtPlotItem(const QwtPlotItem&)’ is private ../qwt/qwt-5.2.0/src/qwt_plot_marker.h:46: error: within this context /usr/include/QtCore/qvector.h: In member function ‘void QVector<T>::realloc(int, int) [with T = QwtPlotMarker]’: /usr/include/QtCore/qvector.h:475: note: synthesized method ‘QwtPlotMarker::QwtPlotMarker(const QwtPlotMarker&)’ first required here Причем пробовал заменить массив с QVector на QList и даже на просто vector<> из STL - нифига. Можно пофиксить? Название: Re: Почему некоторые классы не хотят быть базовым типом массивов? Отправлено: pastor от Март 22, 2010, 19:50 Причина ошибки в том, что:
Цитировать QList's value type must be an assignable data type. Цитировать 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. а согласно сообщению об ошибке: Код
копирующий конструктор запривачен. Побороть можно: Код
Незабывает только освобождать память выделенную под элементы листа. Вышесказанное праведливо и для QVector. Название: Re: Почему некоторые классы не хотят быть базовым типом массивов? Отправлено: SASA от Март 22, 2010, 20:15 Можно отнаследоваться от QwtPlotMarker и определить конструктор копирования и оператор присваивания. Но делать это крайне аккуратно, прочитав http://doc.trolltech.com/4.4/object.html#identity-vs-value (http://doc.trolltech.com/4.4/object.html#identity-vs-value)
|