假设有两个类:Map
和 Entity
。 map 有一个指向游戏中所有实体的指针数组,实体使用 map 来检查他要去的地方是否有空位。因此,在主函数中,我正在执行以下操作:
map->getEntity(x, y)->walk(map)
这会导致实体和 map 之间的循环依赖。我尝试将实体的行走逻辑移至 Map 类,但它导致了许多其他问题,而且在我看来不太正确,因为我想将所有逻辑封装在一个entity.walk()方法中(检查是否目标字段可由实体访问,是否为空等),因此在移动实体之前我不需要在主函数中检查所有这些。我也尝试使用前向声明,但在这种情况下它无济于事,因为 map 和实体都在使用彼此的方法,而这些方法尚未声明。这是我现在拥有的:
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
}
}
}
最佳答案
头文件中只有一个方法声明,仅此而已。简单地不要定义内联方法:
class Entity;
class Map {
public:
void add(Entity* ent);
}
然后在您的 map.cpp
文件中包含两个 header ,并定义方法:
void Map::add(Entity* ent) {
ent->getX()
}
map.cpp
#include
首先是两个头文件,这变成了一个无意义的大汉堡。使用类似的解决方案,结合 Map
和 Entity
的方法来解决它们的循环依赖关系。
关于c++ - 如何避免实体和映射之间的循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67153159/