由于循环依赖,我在Qt中有一些编译错误,但我不知道如何修复它。
以下是代码示例:
QMdiSubWindowMod.h
:
#include <QtWidgets/QtWidgets>
[...]
#include "fenetreedition.h"
class QMdiSubWindowMod : public QMdiSubWindow
{
Q_OBJECT
public:
explicit QMdiSubWindowMod(QWidget * parent = 0, Qt::WindowFlags flags = 0);
[...]
void getPtrFenetreEdition(FenetreEdition* fen); //get error here in the second case
~QMdiSubWindowMod();
private:
[...]
void closeEvent(QCloseEvent *event);
FenetreEdition *m_ptrFenetreEdition;
};
QMdiSubWindowMod.cpp
:
#include "qmdisubwindowmod.h"
QMdiSubWindowMod::QMdiSubWindowMod(QWidget * parent, Qt::WindowFlags flags)
: QMdiSubWindow(parent, flags)
{
}
QMdiSubWindowMod::~QMdiSubWindowMod()
{
}
void QMdiSubWindowMod::closeEvent (QCloseEvent *event)
{
[...]
m_ptrFenetreEdition->onSubWindowClose();
}
[...]
void QMdiSubWindowMod::getPtrFenetreEdition(FenetreEdition* fen)
{
m_ptrFenetreEdition = fen; //and here too for the second case
}
我称之为:
FenetreEdition.h
:
#include "qmdisubwindowmod.h"
#include <QtWidgets/QtWidgets>
[...]
FenetreEdition.cpp
:
QMdiSubWindowMod *onglet = new QMdiSubWindowMod(m_centralArea);
[...]
onglet->getPtrFenetreEdition(&this);
以下是编译器(Qt Creator)中显示的错误:
C2061: Syntax error: identifier 'FenetreEdition' //on method void getPtrFenetreEdition(FenetreEdition* fen);
C2143: Syntax error: missing ';' before '*' //on FenetreEdition *m_ptrFenetreEdition;
C4430: missing type specifier - int assumed. note c++ does not support default-int //on FenetreEdition *m_ptrFenetreEdition;
我无法删除FenetreEdition中的include,因为我需要这个类来创建QMdiSubWindowMod而且我无法删除QMdiSubWindowMod中的include,因为我需要FenetreEdition指针来调用某些点上的方法。
如何解决?提前感谢您的回答!
答案 0 :(得分:4)
您似乎只在[{1}}中使用指向FenetreEdition
的指针。在这种情况下,您可以转发声明类而不是包含标头。然后在QMdiSubWindowMod.h
文件中包含标题。
QMdiSubWindowMod.h:
.cpp