C ++中使用成员函数的循环依赖项

时间:2015-06-03 23:13:17

标签: c++ user-interface circular-dependency

我意识到这个问题已被多次询问,解决方案通常是前向声明。但是,如果我是正确的,则在该文件中使用成员函数时,不能使用前向声明。我有一个循环依赖,我不确定如何通过设计修复,每个依赖使用成员函数。这是我的代码:

// GUI.h
#include "ElementButton.h"

class GUI
{
public:
    vector<ElementButton*> Buttons;
    void ParseElements(); // Uses ElementButton member functions
};


// Element.h
#include "GUI.h"

class Element
{
public:
    void ReplaceGUI(string GUITextFile); // Uses GUI member functions and destructors
    GUI* CurrentGUI;
};


// ElementButton.h
#include "Element.h"

class ElementButton : public Element
{
public:
    void OnButtonClicked(); // Uses inherited ReplaceGUI function
};

1 个答案:

答案 0 :(得分:1)

您不必定义类以返回指针。再添加一个标题ForwardDeclarations.h,如下所示:

class GUI;
class Element;
class ElementButton;

并将其包含在所有标头文件中:

// GUI.h
#include "ForwardDeclarations.h"

class GUI
{
public:
    vector<ElementButton*> Buttons;
    void ParseElements(); // Uses ElementButton member functions
};


// Element.h
#include "ForwardDeclarations.h"

class Element
{
public:
    void ReplaceGUI(string GUITextFile); // Uses GUI member functions and destructors
    GUI* CurrentGUI;
};


// ElementButton.h
#include "ForwardDeclarations.h"
#include "Element.h"

class ElementButton : public Element
{
public:
    void OnButtonClicked(); // Uses inherited ReplaceGUI function
};

请注意,ElementButton.h仍然需要包含Element.h,因为从类Element派生类ElementButton需要类定义。