【发布时间】:2012-08-09 00:19:23
【问题描述】:
我目前在我的一个项目 (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++)。
提前感谢您! 克里斯
【问题讨论】:
-
您能否详细说明尝试前向声明时发生的情况?还有你的代码文件的结构是什么?我的意思是相关的类在哪些文件中?
标签: c++ singleton circular-reference