Здравствуйте!
Решил сделать взаимодействие с графиком в отдельном файле, чтобы удобно было работать с кнопками и самим графиком, но столкнулся с такой проблемой, что при компиляции появляется ошибка does not name a type. Я поискал в гугле, что по этой проблеме говорят (например, https://stackoverflow.com/questions/2133250/x-does-not-name-a-type-error-in-c), понял, что нужно сместить свой класс, так чтобы он собирался раньше чем MainWindow, но я не понимаю, как это сделать, когда класс MainWindow основной, и при перестановке хедеров в mainwindow.h у меня появляется еще большее количество ошибок.
mianwindow.h
#include <QMainWindow> #include <QFont> #include <QVector> #include <QTimer> #include <QtMath> #include "oscilloscope.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); public slots: void setData(const QVector< double > &keys, const QVector< double > &values); void replotGraph(); signals: private: Ui::MainWindow *ui; Oscilloscope *scope; };
oscilloscope.h
#include <mainwindow.h> #define SIZE_SAMPLE 5000 #define TIME_UPDATE 10 class Oscilloscope : public QMainWindow { Q_OBJECT public: Oscilloscope(QWidget *parent = nullptr); ~Oscilloscope(); void Updated(); void setNotifyInterval(int t); double gaussrand(double m, double sko); double sin(double f, double amp, int x); void setTimeUpdate(int time); private slots: void processing(); signals: void notify(); void setData(const QVector<double> &keys, const QVector<double> &values); void replotGraph(); void setColorPen(); void setStalyPen(); void setRandgeAxisX(); void setRandgeAxisY(); private: QTimer *timer; QVector<double> x, y; QVector<double> xSin, ySin; int timeUpdate; };
Проблема исчезла, когда я родителем у класса Oscilloscope сделал QObject. Правильно ли я понимаю, что сделав в качестве родителя самый базовый класс Qt, я гарантировал, что мой созданный класс будет собираться перед MainWindow?