我在C++中创建自己的游戏引擎时遇到了一个小问题。我想要两个对象:
ObjectCreator类和Player类。对象创建者可以创建玩家,玩家可以使用对象创建者创建项目符号。问题是,相互使用两个头文件会导致游戏无法编译。简单地在头文件中声明没有#include的类是行不通的,因为我不能用这种方式访问函数。
下面是一个例子:
#include "Player.h"
class ObjectCreator
{
public:
ObjectCreator();
void CreatePlayer();
}
#include "ObjectCreator";
class Player
{
Public:
Player();
CreateBulletsWithObjectCreator();
}
那么,有人能解决这个问题吗?任何帮助都将不胜感激:3
如果你有一个循环依赖,它通常是一种糟糕的设计气味。解决这个问题的一种常见方法是将一个部分中被另一个引用的功能提取到第三个类中。
在您的情况下,您可以将ObjectCreator
分为PlayerCreator
和BulletCreator
。无论如何,让一个类创建所有类型的对象似乎没有任何逻辑意义。
从语法上讲,也有一些方法可以与循环依赖共存。诀窍是只在至少一个头文件中转发声明循环引用的对象,而不是包括它的头;然后仅在源文件中包括另一个报头。然而,由于有不良设计的味道,进行上述重新设计通常是一个更好的主意。