Хорошо, я полностью потерялся здесь.
У меня есть два класса: mainwindow.cpp и settings.cpp. Оба используют функции от другого. Поэтому я попытался сделать каждый из них другим, но это привело к включению цикла. Поэтому мне пришлось использовать форвардные объявления. Однако это привело к ошибке: прямое объявление "Настройки класса".
Это мой код сейчас:
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
class Settings;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void someFunction();
private:
Ui::MainWindow *ui;
Settings *settings;
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
QTreeWidgetItem* status;
QString setting = settings->getSomeSetting();
}
MainWindow::~MainWindow() {
delete ui;
}
void someFunction() {
// DO STUFF
}
settings.h:
#ifndef SETTINGS_H
#define SETTINGS_H
class MainWindow;
class Settings : public QSettings {
public:
Settings();
QString getSomeSetting();
private:
MainWindow *mainwindow;
};
#endif // SETTINGS_H
settings.cpp:
#include "settings.h"
Settings::Settings() : QSettings(qApp->applicationDirPath() + "/settings.ini", QSettings::IniFormat) {
}
QString Settings::getSomeSetting() {
mainwindow->someFunction();
return "somesetting";
}
Так может ли кто-нибудь дать некоторые рекомендации о том, как это сделать? Заранее спасибо!
Вам нужно # включить "settings.h" в mainwindow.cpp и #include "mainwindow.h" в settings.cpp.
Читайте о различии в определении и определении.
Вам не хватает include и есть объявление вперед, которое не требуется. Если вы добавите include в mainwindow.h(#include "settings.h"
) и переадресовываете класс mainwindow в свой заголовок настроек, это должно работать нормально.