Как избежать ошибки при использовании объектов класса, наследованного от QObject? Есть класс DataSignal, который я наследую от QObject, также есть класс Generator, который использует объекты этого класса, т.е. есть у генератора метод, который должен возвращать объект класса DataSignal. Но при компиляции выдается следующая ошибка: - call to implicitly-deleted copy constructor of 'DataSignal' - copy constructor of 'DataSignal' is implicitly deleted because base class 'QObject' has a deleted copy constructor Класс сигналов#ifndef DATASIGNAL_H #define DATASIGNAL_H #include #include class DataSignal : public QObject { Q_OBJECT public: explicit DataSignal(QObject *parent = 0); QVector getData(); QVector getTimeScale(); private: QVector data; QVector timeScale; signals: void dataChanged(QVector data); void timeScaleChanged(QVector data); void cleared(); public slots: void setData(QVector data); void setTimeScale(QVector timeScale); void clear(); }; #endif // DATASIGNAL_H В свою очередь, наш генератор наследуется от абстрактного класса#include #include "datasignal.h" class AbstractGenerator : public QObject { Q_OBJECT public: explicit AbstractGenerator(QObject *parent = 0); signals: void signalIsGenerated(DataSignal *signal); public slots: }; Сам класс генератора#include "abstractgenerator.h" #include "filtercore.h" class DiscreteGenerator : public AbstractGenerator { public: DiscreteGenerator(); public slots: DataSignal generateSimpleSignal(/*some params*/); }; А здесь, в *.cpp файле, возникает ошибка:DataSignal DiscreteGenerator::generateSimpleSignal(/*some params*/){ DataSignal signal; /*something happens*/ return signal; } Помогите, люди добрые!
Проблема здесь заключается в том, что класс QObject, от которого наследуется класс DataSignal, имеет удаленный конструктор копирования. Это означает, что объекты класса QObject не могут быть скопированы или возвращены по значению.
Чтобы избежать этой ошибки, вам нужно вернуть указатель или ссылку на объект DataSignal, а не сам объект. В вашем классе DiscreteGenerator измените метод generateSimpleSignal следующим образом:
Таким образом, вы избежите ошибки implicit-deleted copy constructor и сможете вернуть объект DataSignal из метода генератора. Не забудьте освободить память, если вы используете указатель!
Проблема здесь заключается в том, что класс QObject, от которого наследуется класс DataSignal, имеет удаленный конструктор копирования. Это означает, что объекты класса QObject не могут быть скопированы или возвращены по значению.
Чтобы избежать этой ошибки, вам нужно вернуть указатель или ссылку на объект DataSignal, а не сам объект. В вашем классе DiscreteGenerator измените метод generateSimpleSignal следующим образом:
DataSignal *DiscreteGenerator::generateSimpleSignal(/*some params*/) {DataSignal *signal = new DataSignal();
/*something happens*/
return signal;
}
Или, если вы хотите использовать ссылку вместо указателя:
DataSignal &DiscreteGenerator::generateSimpleSignal(/*some params*/) {static DataSignal signal;
/*something happens*/
return signal;
}
Таким образом, вы избежите ошибки implicit-deleted copy constructor и сможете вернуть объект DataSignal из метода генератора. Не забудьте освободить память, если вы используете указатель!