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