我意识到这个问题已经被问过很多次了,解决方案通常是向前声明。但是,如果我是正确的,当在该文件中使用成员函数时,不能使用前向声明。我有一个循环依赖,我不确定如何通过设计和每个依赖使用成员函数修复。下面是我的代码:
// 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
};
您不必为了返回指针而定义类。像这样再添加一个报头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需要定义类。