gpt4 book ai didi

c++ - 类 "classname"没有成员 "function"

转载 作者:太空狗 更新时间:2023-10-29 21:36:26 30 4
gpt4 key购买 nike

所以我有一个学校项目,我必须制作一个随机的地牢爬虫。我是 C++ 的新手,我有一个错误,我知道问题出在哪里,但我不知道如何准确地解决它。

事情是这样的:

在我的 Chamber 类中,我想要一个指向 DungeonLayer 类的指针。但是我不能将 DungeonLayer.h 包含到 Chamber.h 中,因为 DungeonLayer.h 已经包含了 Chamber.h,所以我得到一个异常(exception)。

我怎样才能让 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);
};

商会.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 访问?

最佳答案

如果我没有正确理解您的问题,那么这与以下描述的问题相同: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 风格的指针

关于c++ - 类 "classname"没有成员 "function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191340/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com