好吧,我在这里完全迷失了。
我有两个类,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";
}
那么有人可以就如何做到这一点给出一些指导吗?提前谢谢!
答案 0 :(得分:1)
您缺少一个包含并且有一个不需要的前向声明。如果你将一个include添加到mainwindow.h(#include "settings.h"
)并在你的设置标题中声明mainwindow类,这应该可以正常工作。
答案 1 :(得分:1)
你需要#include" settings.h"在mainwindow.cpp和#include" mainwindow.h"在settings.cpp。
中了解解除和定义的区别。