c++ - 在 C++ 中,以这种方式包括有问题吗?

标签 c++ file header include

在我的程序中,我有 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/

相关文章:

c++ - 采用 OpenCL 的 Intel HD 6000 本地内存带宽

c++ - 部署

file - 是否有一种独立于操作系统的方式来自动覆盖文件?

android - 如何从 txt 文件中获取某些值?

ios - Xamarin 表格 : CustomWebView on iOS didn't show a simple webpage

iphone - IOS UITableView contentOffSet 不再隐藏从推送的详细 View 返回时的标题

c++ - 用 C++ 解析 Exuberant Ctags

c++ - 在 Qt 中使用 QDesktopWidget 截取多个屏幕的屏幕截图

c# - 为什么 Path.Combine 不能正确连接以 Path.DirectorySeparatorChar 开头的文件名?

c - 在编译器资源管理器中包含 C 的外部头文件