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

这是事情:

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

我怎样才能使 DungeonLayer 类可以从 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);
};

室.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/

10-11 19:06