我的class1需要class2和class2的头部,需要包含class1的头部。
我在class1中包含了class2的头文件,在class2中包含了class1的头文件并且开始出现问题(在class2中我得到的错误表明class1实例没有命名一个类)
请有人解释如何处理这种情况,因为我搜索了这个问题,但没有做什么
谢谢
答案 0 :(得分:3)
一个经常适用的解决方案是简单地向前声明类。例如:
class1.h 的#ifndef CLASS1_H
#define CLASS1_H
class Class2;
class Class1 {
public:
// ...
private:
// ...
std::unique_ptr<Class2> owned_child_;
// ...
};
#endif
class2.h 的
#ifndef CLASS2_H
#define CLASS2_H
class Class1;
class Class2 {
public:
// ...
private:
// ...
const Class1* unowned_parent_;
// ...
};
#endif
但是,请注意,只要您不编写需要使用类定义的代码,此策略才有效,这可以在使用指针或对类的类型的引用时实现。只要您使用没有引用或指针的类类型,您就需要提供已经处理和可用的类的完整声明。