我有两个相互依赖的类,如下所示:
// model.h
#include "facet.h"
class Model {
...
std::map<int, std::vector<Facet*> > enqueue_list_;
}
// facet.h
#include "model.h"
class Facet {
...
Model *parent_;
}
编译器在尝试编译此内容时显然非常不满。我已经通过前向类声明进行了修复,如下所示:
// model.h
#include "facet.h"
class Facet;
class Model {
...
std::map<int, std::vector<Facet*> > enqueue_list_;
}
// facet.h
#include "model.h"
class Model;
class Facet {
...
Model *parent_;
}
但我不喜欢这样做。对我来说,这似乎很混乱且难以维护。我认为使用头文件就可以解决这种问题。有没有更好的方法来解决我的问题?我希望不必在其他类头文件中转发声明类。我觉得我在这里缺少了重要的东西。如果我仍然遇到交叉依赖的问题,那么头文件的作用是什么?
提前致谢,
Max 编辑 感谢您的快速回复。我接受了建议并删除了头文件中的包含,并完全转向了前置声明。如果类具有直接的类分配,我仍然需要实际包含头文件,这一点我是正确的吗?
// facet.h
#include "point.h"
class Facet {
...
private:
Point normal_;
}
在这里尝试使用前向声明时,我遇到了错误。这是否确实是一个必须要使用#include
的情况?