在我的程序中,我有 Vertex 的边和面的类,我希望用它们来建模形状。在此之前,我的 Edge 类包括我的“vertex.h”文件,我的 Face 类包括我的 Edge.h 文件。在 Face 类中,我声明了一些边类型变量,在 Edge 类中,我声明了一些顶点类型的变量。一切正常。我的问题是在实现过程中,我意识到我希望边缘能够知道它们连接在一起的面孔,并且我想将其存储在边缘内。我想声明一个 Face 类型的指针,并在类的构造函数中使用:
Face * joiningFaces = new joiningFaces[2];
当我这样做时,我收到语法错误,指出 Face 不是一种类型,即使我在 Edge.h 中包含 Face.h 也是如此。
是否存在某种层次结构阻止我在面中包含边以及在边中包含面?还是我在做傻事?
===代码====
===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
};
===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_ */
最佳答案
你有一个循环引用;如果您只需要在 Edge.h
中引用对 Face
的指针或引用,那么您可以前向声明 Face
而不是包含 人脸.h
:
class Face;
想想包含的工作原理:如果您要将 Face.h
的内容粘贴到 Edge.h
中,然后再粘贴 Edge.h 的内容
在 Face.h
中,你会有一个无限循环; include guards 防止多重包含:
#ifndef X_H
#define X_H
// ...
#endif
但是如果您有相互引用的类,则必须前向声明其中一个或两个以打破循环。
关于c++ - 在 C++ 中,以这种方式包括有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779034/