其他分享
首页 > 其他分享> > c – 前向声明和循环依赖

c – 前向声明和循环依赖

作者:互联网

我有两个课程,实体和水平.两者都需要访问彼此的方法.因此,使用#include会产生循环依赖的问题.因此,为了避免这种情况,我尝试在Entity.h中转发声明Level:

class Level { };

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

解决方法:

适当的前瞻性声明就是:

class Level;

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

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

class Level;

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

为了能够在实体的方法中使用Level,理想情况下应该在单独的.cpp文件中定义Level的方法,并且只在头部中声明它们.将声明与定义分开是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,declaration,dependencies,circular-dependency,forward
来源: https://codeday.me/bug/20191005/1855689.html