QT-错误:ISO C++禁止声明“主窗口”,没有类型

QT-错误:ISO C++禁止声明“主窗口”,没有类型,qt,qt-creator,Qt,Qt Creator,首先,经过大量的搜索、阅读和调试,我发布了这个问题。。。但解决不了问题 我有两个类MainWindow和Controller,它们都需要包含另一个。我尝试使用转发来解决递归包含的问题,但没有成功。 我想我在用名称空间实现forward时遇到了一些问题 两个类的代码:我尽量缩短代码 主窗口 controller.cpp 我一直有这个ISO错误 很抱歉代码太长,如果任何部分不够清晰,只需向前声明主窗口即可。代替 在controller.h中包括mainwindow.h 与 也可以将其称为Ui::Ma

首先,经过大量的搜索、阅读和调试,我发布了这个问题。。。但解决不了问题

我有两个类MainWindow和Controller,它们都需要包含另一个。我尝试使用转发来解决递归包含的问题,但没有成功。 我想我在用名称空间实现forward时遇到了一些问题

两个类的代码:我尽量缩短代码

主窗口

controller.cpp

我一直有这个ISO错误

很抱歉代码太长,如果任何部分不够清晰,只需向前声明主窗口即可。代替 在controller.h中包括mainwindow.h

也可以将其称为Ui::MainWindow*viewObj;或者在controller.h中使用名称空间Ui编写

编辑

这很好:

主窗口

controller.cpp


我以前尝试过这个,但它给了我错误:不完整类型“struct Ui::MainWindow”的使用无效。。。我试图解决这个新错误,在controller.cpp文件中包含mainwindow.h,但它不起作用!!!好的,很抱歉,我被MainWindow和Ui::MainWindow是两个不同的类这一事实弄糊涂了,我将用一个工作示例编辑我的答案当我尝试您的解决方案时,我发现mainview.cpp包含的文件Ui_MainWindow.h有以下代码:名称空间Ui{class MainWindow:public Ui_MainWindow{};//名称空间Ui。。。。顺便说一句,mainview类是由QtCreatorIt自动生成的,它工作正常,尽管之前尝试过您的解决方案。。。但是我认为我在做一些错误的改变。。。谢谢你的帮助
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCore>
#include "controller.h"


namespace Ui {
    class MainWindow;
}


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void addRadioButtons();
    void changeViewQML(QString);
    void changeViewXML(QString);

private:
    Ui::MainWindow *ui;
    controller controllerObj;
};

#endif // MAINWINDOW_H
#ifndef CONTROLLER_H
#define CONTROLLER_H

#include <QtCore>
#include "mainwindow.h"


class controller : public QThread
{
public:
    controller();
    void response_handler(QString);

private:
    MainWindow *viewObj;

protected:
    void run();

};

#endif // CONTROLLER_H
#include "mainwindow.h"
#include "ui_mainwindow.h"   

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeViewQML(QString s)
{
    qDebug(s.toAscii());
}
#include "controller.h"

controller::controller()
{
}

void controller::response_handler(QString responseFilePath)
{
    viewObj->changeViewQML(responseFilePath);
}
namespace Ui {
    class MainWindow;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCore>
#include "controller.h"

namespace Ui{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void addRadioButtons();
    void changeViewQML(QString);
    void changeViewXML(QString);

private:
    Ui::MainWindow *ui;
    controller controllerObj;
};

#endif // MAINWINDOW_H
#ifndef CONTROLLER_H
#define CONTROLLER_H

#include <QtCore>
//#include "mainwindow.h"
class MainWindow;


class controller : public QThread
{
public:
    controller();
    void response_handler(QString);

private:
    MainWindow *viewObj;

protected:
    void run();

};

#endif // CONTROLLER_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeViewQML(QString s)
{
    qDebug(s.toAscii());
}
#include "controller.h"
#include "mainwindow.h"

controller::controller()
{
}

void controller::run()
{
}

void controller::response_handler(QString responseFilePath)
{
    viewObj->changeViewQML(responseFilePath);
}