c++ - 具有父类和子类设置的 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 对象。
解决方案
推荐阅读
- ubuntu - 在 ubuntu 中更改文件权限
- c# - 使用 Stream 生成的 SendGrid 附件显示不受保护
- excel - Excel:带有单元格的列的产品总和
- python - 为什么挤压不适用于稀疏数组?
- sql - IntegrityError:在表“carts_cart_items”上插入或更新违反外键约束
- php - 即使更换了实际的密钥,谷歌验证码也无法正常工作
- pagespeed-insights - 有什么方法可以增加启用了 Google Adsense 的页面的 pagespeed-insight 分数?
- angular - 使 Windows 身份验证与 IIS 下的 Identity Server 4 一起工作
- django - 在 django admin 中动态更改表单的一部分
- pandas - 重复一组行(数据框)并向每组添加一个字符串