gpt4 book ai didi

c++ - 前向声明和循环依赖

转载 作者:可可西里 更新时间:2023-11-01 17:41:31 42 4
gpt4 key购买 nike

我有两个类,实体和级别。两者都需要访问彼此的方法。因此,使用#include,就会出现循环依赖的问题。因此,为了避免这种情况,我尝试在 Entity.h 中转发声明级别:

class Level { };

然而,由于 Entity 需要访问 Level 中的方法,它无法访问这些方法,因为它不知道它们的存在。有没有办法在不重新声明实体中的大部分级别的情况下解决这个问题?

最佳答案

正确的前向声明很简单:

class Level;

请注意缺少大括号。这告诉编译器有一个名为 Level 的类,但没有关于它的内容的信息。然后,您可以自由地使用指向这个未定义类的指针 (Level *) 和引用 (Level &)。

请注意,您不能直接实例化 Level,因为编译器需要知道类的大小才能创建变量。

class Level;

class Entity
{
Level &level; // legal
Level level; // illegal
};

为了能够在 Entity 的方法中使用 Level,理想情况下,您应该定义 Level方法放在一个单独的 .cpp 文件中,并且只在 header 中声明它们。将声明与定义分开是 C++ 的最佳实践。

// entity.h

class Level;

class Entity
{
void changeLevel(Level &);
};


// entity.cpp

#include "level.h"
#include "entity.h"

void Entity::changeLevel(Level &level)
{
level.loadEntity(*this);
}

关于c++ - 前向声明和循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16802485/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com