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

时间:2016-02-09 05:38:22

标签: c++ header-files forward-declaration incomplete-type

如果前向声明导致类型错误不正确,如何避免头文件中的#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();
};

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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