2014-09-20 179 views
0

好吧,我完全失去了这里。使用来自其他课程的功能,其中包括此类

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

我没有看到任何包含? – 2014-09-20 20:07:19

+0

是的,这是我试图使用前瞻性声明,但它不工作。我需要知道如何正确地做到这一点(两个类使用其他功能)。 – Qub1 2014-09-20 20:11:09

+0

@Deduplicator这是Qt生成的东西。 (Qt就像一个GUI框架)。 – Qub1 2014-09-20 20:12:36

回答

1

你需要#include“settings.h”在mainwindow.cpp和#include“mainwindow.h”settings.cpp中。

阅读关于declration和definition的区别。

1

您错过了一个include并且有一个不需要的前向声明。如果你添加一个include到mainwindow.h(#include "settings.h")并且在你的设置头中转发声明mainwindow类,这应该工作得很好。

+0

我尝试过,但后来我得到这个错误:使用不完整的类''''MainWindow'''''''''','状态'); QTreeWidgetItem * status = window-> setStatus(“Adding game \”“+ gameName +”\“”,“Status”); ^ – Qub1 2014-09-20 21:53:11