所以我有一个学校项目,我必须制作一个随机的地下城爬虫。我是C ++的新手,我有一个错误,我知道问题是什么,但我不知道如何解决它。
事情就是这样:
在我的Chamber类中,我想要一个指向DungeonLayer类的指针。但我不能将DungeonLayer.h包含在Chamber.h中,因为DungeonLayer.h已经包含了Chamber.h,所以我得到了一个例外。
如何才能使其成为可以从Chamber类访问的DungeonLayer类?
文件:
DungeonLayer.h
#pragma once
#include <vector>
#include "Chamber.h"
class DungeonLayer {
public:
DungeonLayer(std::string text, int l);
Chamber findChamber(int x2, int y2);
std::vector<Chamber> chambers;
void generateDungeonLayer();
bool chamberExists(int x2, int y2);
};
Chamber.h
#pragma once
#include <vector>
#include "Enemy.h"
#include "Hero.h"
class DungeonLayer {
};
class Chamber {
public:
Chamber(std::vector<Chamber>* dungeonLayer, int ammountOfChambers);
DungeonLayer *layer;
Chamber *nextChamber;
.......
Chamber* Chamber::getNextChamber();
void moveToChamber();
private:
bool visited;
};
每当我设置DungeonLayer(图层)的指针并且我想在其上调用一个函数时它会给出错误:
实施例
layer->findChamber(0,0);
错误:
"class "DungeonLayer" has no member "findChamber" CPPAssessment Chamber.cpp"
这是显而易见的,因为Chamber.h中的DungeonLayer类没有任何内容。但是我怎样才能让DungeonLayer可以进入Chamber?
答案 0 :(得分:2)
如果我已正确理解您的问题,则会遇到与Resolve header include circular dependencies中描述的问题相同的问题。
它被称为循环依赖。他们都互相包容。在这种情况下,向前在Chamber中声明DungeonLayer,因此它在chamber.h中看起来像这样:
class DungeonLayer;
class Chamber {
public:
Chamber(std::vector<Chamber>* dungeonLayer, int ammountOfChambers);
DungeonLayer *layer;
Chamber *nextChamber;
.......
Chamber* Cha
}
这样你告诉编译器它知道DungeonLayer,但它不必包含它。要打电话给你,你需要知道DungeonLayer。这可以通过将其包含在chamber.cpp文件中来实现。它应该以
开头#include "DungeonLayer.h"
顺便说一下,当你有像shared_ptr这样的智能指针时,不要使用C风格的指针