C++:外部对象循环引用

标签 c++ game-engine extern circular-dependency

由于循环依赖,我在另一个对象中声明外部对象时遇到问题。请考虑以下事项:

LevelEditor 对象包含一个模块数组(所有模块都是 editor_module 的子模块):

#include "../Objects/editor_module.h"
#include "Modules/collisionGrid_module.h"
#include "Modules/HUD_module.h"
#include "Modules/IO_module.h"
#include "Modules/ledge_module.h"
#include "Modules/segment_module.h"

namespace g_editor
{
    class LevelEditor
    {

但是模块需要返回到编辑器才能使用它的功能:

#pragma once

#include "../LevelEditor/LevelEditor.h"
extern g_editor::LevelEditor g_levelEditor;

namespace g_editor
{
    class editor_module
    {

在编译时,存在循环依赖问题。是否有我忽略的设计注意事项?

最佳答案

如果模块只需要类的引用,那么它们不需要完整的类定义,只需要一个前向声明:

namespace g_editor {class LevelEditor;}

任何需要完整定义(例如访问它的成员)的代码,例如模块的成员函数中的代码,都必须放在源文件中,其中包含头文件。但是模块的类定义本身不需要它。

关于C++:外部对象循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057706/

相关文章:

c++ - 无法从 boost::asio::io_service::run 捕获异常

c++ - 如何获取从 QMainWindow 派生的类的 HWND

java - 在 JFrame 中连续显示和重绘多个游戏 View (组件)的最佳方式

unity3d - 统一的 NavMeshAgent 不起作用

c++ - 为什么 C++ 编译器允许 extern 关键字与定义相结合?

c++ - 无法从另一个项目链接一个项目的头文件和 cpp 文件 LNK2019 : unresolved external symbol error

c++ - std::set 使用 char * 类型查找行为

c++ - 最好的免费可移植 3d/2d 引擎是什么?

c++ - 如何声明静态 vector 成员

c++ - 'void*' 到 'char"分配中的不兼容类型 ------ 在 malloc 中