2016-10-22 37 views
3

所以我有一个学校项目,我必须制作一个随机地牢爬行器。我对C++很陌生,我有一个错误,我知道问题是什么,但我不知道如何正确解决它。类“classname”没有成员“函数”

这里是东西:

在我商会类我想要一个指针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->findChamber(0,0); 

错误:

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

这是显而易见的,因为该类DungeonLayer在Chamber.h有什么也没有。但是我怎样才能使DungeonLayer可以从Chamber上访问?

+2

您曾两次定义的类'DungeonLayer'。如果你想提前宣布它,那不是你怎么做的。 – krzaq

+0

你是什么意思?我已经在Dungeonlayer.h和Chamber.h中声明了DungeonLayer或者? – Jelmer

+0

第http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-claclaration – krzaq

回答

2

如果我已正确理解您的问题,则这与在Resolve header include circular dependencies中描述的问题相同。

它被称为循环依赖。他们都包括对方。在这种情况下,向前庭宣布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" 

开始顺便说一下,不要使用C风格的指针,当你有智能指针一样的shared_ptr

+0

谢谢!我正在寻找最后一行,现在对我来说很明显 – Jelmer

+1

此外,我们不允许使用智能指针,但哈哈。但是,谢谢你的提示! – Jelmer