如何在c++中处理相互依赖的类

How to deal with codependent classes in c++

本文关键字:依赖 处理 c++      更新时间:2023-10-16

我有一个class1,它需要class2的头。还有一个class2,它需要包含class1的头。

我在类1中包含了类2的头,在类2中包含了类1的头,麻烦开始了(在类2中,我得到了一个错误,说类1实例没有命名类)

请有人解释一下如何处理这种情况,因为我在谷歌上搜索了这个问题,但没有得到该怎么办

感谢

一个通常适用的解决方案是简单地转发声明类。例如:

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

但是,请注意,只有在不编写要求类定义可用的代码的情况下,此策略才有效,这可以在使用指向类类型的指针或引用时实现。一旦使用不带引用或指针的类类型,就需要提供已处理的类的完整声明。