首先,我经过大量的搜索,阅读和调试后发布了这个问题......但是无法解决问题。
我有两个类MainWindow和Controller,它们都需要包含另一个。我试图解决递归包括使用转发的问题,但它没有用。 我认为在使用名称空间实现转发方面存在一些问题。
两个类的代码:(我试图尽可能缩短代码)
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错误。
对不起长代码,如果任何部分不够清楚
答案 0 :(得分:0)
向前宣布MainWindow
。更换
controller.h中的#include "mainwindow.h"
带
namespace Ui {
class MainWindow;
}
也可以在控制器中将其称为Ui::MainWindow *viewObj;
或写入using namespace Ui
修改强>
这编译好了:
<强> 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 MainWindow;
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"
#include "mainwindow.h"
controller::controller()
{
}
void controller::run()
{
}
void controller::response_handler(QString responseFilePath)
{
viewObj->changeViewQML(responseFilePath);
}