在C++中是否存在错误,包括这种方式?

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)

Jon*_*rdy 5

你有一个循环参考; 如果你只需要引用指针或对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)

但是如果你有相互引用的类,你必须向前声明其中一个或两个以便打破循环.