类“classname”没有成员“function”

时间:2016-10-22 11:00:42

标签: c++ c++11 pointers visual-c++

所以我有一个学校项目,我必须制作一个随机的地下城爬虫。我是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?

1 个答案:

答案 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风格的指针