0
首先,我发布了很多搜索,阅读和调试后的问题......但无法解决问题。Qt - 错误:ISO C++禁止声明'MainWindow'没有类型
我有两个类MainWindow和Controller,他们都需要包含其他。我试图解决使用转发的递归问题,但它不起作用。 我想我用命名空间实现forward有一些问题。
两个类中的代码:(我试图缩短代码长度,尽可能地)
mainwindow.h
#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
或者Controller.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
mainwindow.cpp
#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());
}
controller.cpp
#include "controller.h"
controller::controller()
{
}
void controller::response_handler(QString responseFilePath)
{
viewObj->changeViewQML(responseFilePath);
}
和我保持有这个ISO错误。
遗憾的长码,如果任何部分是不够的
我试过这之前,它给了我错误:使用不完整的类型'struct Ui :: MainWindow'...我试图解决这个新的错误我的#include“mainwindow.h”在controller.cpp文件中但它不工作! –
好吧,对不起,我对'MainWindow'和'Ui :: MainWindow'是2个不同的类的事实感到困惑,我打算用一个工作示例编辑我的答案 – PeterT
当我尝试你的解决方案时,我发现文件mainview.cpp包含的“ui_mainwindow.h”具有以下代码:namespace Ui {MainWindow:public Ui_MainWindow {};}} } //命名空间Ui ....顺便说一下,mainview类是由QtCreator自动生成的 –