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

C++: Extern Object Circular Reference

本文关键字:循环 引用 对象 外部 C++      更新时间:2023-10-16

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

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;}

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