C++ 使用包含该类的其他类中的函数

C++ 使用包含该类的其他类中的函数,c++,qt,C++,Qt,好吧,我完全迷路了 我有两个类,mainwindow.cpp和settings.cpp。两者都使用另一个的函数。所以我试着让每一个包含另一个,但这导致了一个包含循环。所以我不得不使用转发声明。但是,这些导致了错误:转发“类设置”声明 这是我现在的代码: mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H class Settings; namespace Ui { class MainWindow; } class Mai

好吧,我完全迷路了

我有两个类,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
    }
设置。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";
}

那么,有人能就如何做到这一点提供一些指导吗?提前谢谢

您缺少一个include,并且有一个不需要的转发声明。如果您将include添加到mainwindow.h(
#include“settings.h”
)并在设置标题中向前声明mainwindow类,这应该可以正常工作。

您需要在mainwindow.cpp中包含“settings.h”,在settings.cpp中包含“mainwindow.h”


阅读定义和定义的区别。

我没有看到任何包含?是的,这是我试图使用正向声明,但它不起作用。我需要知道如何正确地做到这一点(两个类使用彼此的函数)。@Deduplicator这是Qt生成的。(Qt有点像GUI框架)。我试过了,但出现了以下错误:无效使用不完整的类型“class MainWindow”QTreeWidgetItem*status=window->setStatus(“添加游戏\”“+gameName+”,“状态”)^