mik*_*eyP 0 c++ header file include
在我的程序中,我有Vertex的Edges和Faces的类,我希望它可以用来模拟形状.在此之前,我的Edge类包含了我的"vertex.h"文件,而我的Face类包含了我的Edge.h文件.在Face类中,我声明了一些边类型变量,在Edge类中,我声明了一些vertex类型的变量.一切正常.我的问题是在我的实现过程中,我意识到我希望边缘能够意识到它们连接在一起的面孔,并且我希望将它存储在边缘内.我想声明一个Face类型的指针,并在类的构造函数中使用:
Face * joiningFaces = new joiningFaces[2];
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到的语法错误表明Face不是一个类型,即使我在Edge.h中包含了Face.h.
是否存在某种层次结构系统阻止我将Face in Face和Edge in Edge包括在内?或者我做了一些愚蠢的事情?
===代码====
=== edge.h ===
#ifndef EDGE_H_
#define EDGE_H_
#include "Vertex.h"
#include "Face.h"
class Edge {
private:
Vertex a;
Vertex b;
Face * joinsFace;
public:
Edge();
Edge(Vertex newa, Vertex newb);
...ect
};
Run Code Online (Sandbox Code Playgroud)
=== Face.h ===
#ifndef FACE_H_
#define FACE_H_
#include "Edge.h"
class Face {
private:
Edge a;
Edge b;
Edge c;
public:
Face();
Face(Edge newA, Edge newB, Edge newC);
virtual ~Face();
Edge getEdgeA();
Edge getEdgeB();
Edge getEdgeC();
};
#endif /* FACE_H_ */
Run Code Online (Sandbox Code Playgroud)
你有一个循环参考; 如果你只需要引用指针或对Facein的引用Edge.h,那么你可以转发声明Face而不是包括Face.h:
class Face;
Run Code Online (Sandbox Code Playgroud)
想想包含是如何工作的:如果你要粘贴Face.hin 的内容Edge.h,然后是Edge.hin 的内容Face.h,你就会有一个无限循环; 包括警卫防止多重包含:
#ifndef X_H
#define X_H
// ...
#endif
Run Code Online (Sandbox Code Playgroud)
但是如果你有相互引用的类,你必须向前声明其中一个或两个以便打破循环.