首页 > 解决方案 > 具有父类和子类设置的 C++ 循环依赖

问题描述

C++ 中的循环依赖问题似乎是初学者的常见问题。我查看了无数案例和对这些案例的解释,但找不到将修复应用于我的具体案例的方法。

程序设置和我的目标

假设我有两个类 - aGrid和 a Cell。在父子范式中,它Grid是一个比喻性的父级,其中包含许多子Cell对象。Cell必须能够访问其自己的父级Grid,并且Grid必须能够访问其任何一个子级Cell

我目前按如下方式实现(请注意,我删除了不相关的成员和参数)。

Grid.h 和 Grid.cpp

// == Grid.h == //

#include "Cell.h"

class grid 
{
private:
    std::vector<std::unique_ptr<cell>> cells; // vector of pointers to child cells

public:
    void add_cell(grid *parent_grid, [params...]) {cells.push_back(std::make_unique<cell>(parent_grid, [params...])};
}

Cell.h 和 Cell.cpp

// == Cell.h == //

class grid; // forward-declaration?

class cell 
{
private:
    grid *parent = nullptr;

public:
    cell(grid *parent_grid, [params...]);
}

// == Cell.cpp == //

cell::cell(grid *parent_grid, [params...])
{
    parent = parent_grid; // Assign the parent pointer to point to the set parent.
}

主文件

#include "Grid.h"

int main()
{
...
}

问题

这一直有效,直到 aCell尝试访问其 parent 的成员方法Grid,例如:

[... inside a Cell member method ...]
(*parent)->grid_maintenance_method();

我立即收到以下错误:error: incomplete definition of type 'grid'.

如何解决这个循环依赖问题?显然,前向声明对于父 Grid 的基本表示已经足够了,但还不够,因为我无法访问父 Grid 对象。

标签: c++classcircular-dependency

解决方案


推荐阅读