如何避免在转发声明导致不完整类型错误时在头文件中 #include

How to avoid #include in header files when forward declaration causes incomplete type error?

本文关键字:错误 类型 文件 #include 转发 何避免 声明      更新时间:2023-10-16

当前向声明导致不完整类型错误时,如何避免头文件中 #include?

这是我ray.h头文件。当我实现前向声明时Vector变成不完整的类型。在这种情况下,我将不得不在头文件中使用 #include?

#include "vector.h"
struct Ray {
    Vector position, direction; // error: incomplete type when it uses forward declaration
    Ray();
    Ray(Vector position, Vector direction);
    ~Ray();
};

由于结构Ray定义的方式,每个使用Ray.cpp文件也必须知道Vector,所以如果你在ray.h中只有一个前向声明,它必须在任何#include "ray.h"之前#include "vector.h"。这很不方便。

因此,如果您只是将#include "vector.h"添加到ray.h,则对每个人来说都是最简单的。然后,人们可以#include "ray.h"并开始使用Ray,而无需额外的#include

实际上,有一种方法可以避免#include。您可以使用Vector*(指向Vector的指针(或std::unique_ptr<Vector>(实际上相同,但不需要显式分配\解除分配字段(。