【发布时间】:2021-04-18 20:37:58
【问题描述】:
假设有两个类:Map 和 Entity。地图有一个指向游戏中所有实体的指针数组,实体使用地图来检查是否有他要去的空点。因此,在 main 函数中,我正在执行以下操作:
map->getEntity(x, y)->walk(map)
这会导致实体和地图之间的循环依赖。我尝试将实体的行走逻辑移动到 Map 类,但它引起了许多其他问题,我认为这不太正确,因为我想将所有逻辑封装在 entity.walk() 方法中(检查是否目标字段可由实体访问,是否为空等),因此在移动实体之前,我不需要在我的主要功能中检查所有这些。我也尝试过使用前向声明,但在这种情况下它无济于事,因为地图和实体都在使用彼此的方法,这些方法尚未声明。这是我现在拥有的:
class Entity;
class Map {
public:
void add(Entity* ent) {
ent->getX() //Map.h
//...
}
}
#include "Map.h"
class Entity {
void walk(Map* map) {
if(map->isEmpty(x, y)) {
//... //Entity.h
}
}
}
【问题讨论】:
标签: c++ oop circular-dependency