使用包含此类的其他类中的函数

时间:2014-09-20 20:01:04

标签: c++ qt

好吧,我在这里完全迷失了。

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

那么有人可以就如何做到这一点给出一些指导吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你需要#include" settings.h"在mainwindow.cpp和#include" mainwindow.h"在settings.cpp。

了解解除和定义的区别。