由于循环依赖,我在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中的包含,因为我需要此类来创建QMdiSubWindowMod,而我不能删除QMdiSubWindowMod中的包含,因为我需要FenetreEdition指针在某些点上调用方法。

如何解决?预先感谢您的回答!

最佳答案

看来您只在FenetreEdition中使用指向QMdiSubWindowMod.h的指针。在这种情况下,您可以向前声明该类,而不是包含标头。然后在.cpp文件中包含标题。

QMdiSubWindowMod.h:

#include <QtWidgets/QtWidgets>
 [...]
class FenetreEdition;

关于c++ - 如何解决循环依赖关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33575678/

10-10 21:08