类"类名"没有成员"函数"

Class "classname" has no member "function"

本文关键字:成员 函数 类名      更新时间:2023-10-16

我有一个学校项目,我必须制作一个随机的地下城爬行者。我对c++很陌生,我有一个错误,我知道问题是什么,但我不知道如何解决它。

事情是这样的:

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

我怎么能使它使DungeonLayer类是从Chamber类访问?

文件:

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)的指针并且我想在它上面调用一个函数时它就会给出错误:

例子
layer->findChamber(0,0);
错误:

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

这很明显,因为在Chamber.h中的类DungeonLayer中没有任何内容。但我该如何让《DungeonLayer》能够从Chamber访问呢?

如果我正确理解了你的问题,这是相同的问题所描述的:解决头包括循环依赖。

它被称为循环依赖。它们相互包含。在本例中,在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风格的指针