c++ - 与单例互包含

标签 c++ singleton circular-reference

我目前在我的一个项目(C++)中遇到相互包含的问题。

通常,如果我遇到相互包含问题,我会通过前向声明或稍微重新设计类来轻松解决它。但这一次,我卡住了:

我有一个名为 Game 的类,它创建并启动核心游戏系统,其中一个名为 GraphicsSystem。 在 Game 构造函数中,动态创建 GraphicsSystem 对象并将其存储在 GraphicsSystem* 指针中。看起来像这样:

Game::Game ()
{
    gfxSys = new GraphicsSystem(80, new Camera());
}

现在,我的 GraphicsSystem 类需要在某一时刻访问 Game 类的方法以获取存储在 Game 对象中的玩家对象。各自的部分看起来像这样(顺便说一句,游戏是一个单例!):

void GraphicsSystem::handleFrame ()
{
    ElementList elements = Game::instance()->getPlayer()->getEnvironment()->getElements();
}

现在我已经尝试在两个方向上进行前向声明,但这不能满足编译器的要求。我当然也可以将玩家指针放入图形系统,但我真的不想那样做,因为他不属于那里。

有什么方法可以解决这个问题而不必过多地更改设计吗?我现在真的很困惑,所以我希望你们能帮助我。

我使用的是 Visual Studio 2010 (Visual C++)。

提前致谢! 克里斯

最佳答案

转发在 Game.h 中声明 GraphicsSystem。如果需要,将 Game.h 包含在 GraphicsSystem.h 中。在 Game.cpp 中包含 Game.h 和 GraphicsSystem.h。在 GraphicsSystem.cpp 中包含 Game.h 和 GraphicsSystem.h。 这应该基于您发布的代码。

关于c++ - 与单例互包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875091/

相关文章:

java - Log4j 记录器和并发

c# - 单例和常量

json - 将循环结构转换为 JSON——有什么方法可以找到它提示的字段?

mysql - 数据库设计问题——试图避免循环引用

c++ - OpenCV propId 值位于何处?

Java Jersey 在绑定(bind)时构造类

c++ - 3D 空间中的 OpenGL 2D 文本 [C++/GLM] 矩阵乘法

python - 避免在 Django 应用程序中导入循环模型

c++ - 从 C++ 程序运行 perl 程序

c++ - 与临时对象一起使用时了解 C++ std::shared_ptr