C++ “类”;“类名”;“没有成员”;功能“;

C++ “类”;“类名”;“没有成员”;功能“;,c++,c++11,pointers,visual-c++,C++,C++11,Pointers,Visual C++,所以我有一个学校项目,我必须做一个随机的地牢爬虫。我对C++很陌生,我有一个错误,我知道问题是什么,但是我不知道如何精确地解决它。 事情是这样的: 在我的密室类中,我想要一个指向地下城层类的指针。但是我不能把DungeonLayer.h包含到Chamber.h中,因为DungeonLayer.h已经包含Chamber.h,所以我得到了一个例外 我如何使地下城玩家可以从密室类访问它? 档案: 地下城玩家 #pragma once #include <vector> #include "

所以我有一个学校项目,我必须做一个随机的地牢爬虫。我对C++很陌生,我有一个错误,我知道问题是什么,但是我不知道如何精确地解决它。 事情是这样的:

在我的密室类中,我想要一个指向地下城层类的指针。但是我不能把DungeonLayer.h包含到Chamber.h中,因为DungeonLayer.h已经包含Chamber.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);
};
错误:

"class "DungeonLayer" has no member "findChamber"   CPPAssessment   Chamber.cpp"

这是显而易见的,因为h室中的地下城层一无所有。但我如何才能使地下城层可以从密室访问呢?

如果我正确理解了您的问题,这与中描述的问题相同:

它被称为循环依赖。它们都包括彼此。在这种情况下,在密室中向前声明地下城层,使其在密室中看起来像这样。h:

class DungeonLayer;


class Chamber {
public:
Chamber(std::vector<Chamber>* dungeonLayer, int ammountOfChambers);
DungeonLayer *layer;
Chamber *nextChamber;
.......
Chamber* Cha
}

顺便说一句,当你有像shared_ptr这样的智能指针时,不要使用C风格的指针。你已经定义了两次class
DungeonLayer
。如果你想转发声明,你不是这样做的。你是什么意思?我已经在地下城里宣布了地下城。h和在密室里。h或?不。这没有帮助,我很抱歉,但我正在寻找答案…谢谢!我一直在寻找最后一行,现在对我来说也很明显,我们还不允许使用智能指针哈哈。但是谢谢你的提示!
"class "DungeonLayer" has no member "findChamber"   CPPAssessment   Chamber.cpp"
class DungeonLayer;


class Chamber {
public:
Chamber(std::vector<Chamber>* dungeonLayer, int ammountOfChambers);
DungeonLayer *layer;
Chamber *nextChamber;
.......
Chamber* Cha
}
#include "DungeonLayer.h"