如何声明相互引用的类?

Posted

技术标签:

【中文标题】如何声明相互引用的类?【英文标题】:How can I declare classes that refer to each other? 【发布时间】:2010-03-23 20:52:34 【问题描述】:

自从我完成 C++ 以来已经有很长时间了,我在类相互引用方面遇到了一些麻烦。

现在我有类似的东西:

啊。

class a

  public:
    a();
    bool skeletonfunc(b temp);
;

b.h

class b

  public:
    b();
    bool skeletonfunc(a temp);
;

由于每个人都需要对另一个人的引用,我发现我不能在顶部执行彼此的#include,否则我最终会陷入带有包含的奇怪循环。

那么我怎样才能使a 可以使用b 并且反之亦然,而不会产生周期性的#include 问题?

谢谢!

【问题讨论】:

【参考方案1】:

你必须使用Forward Declaration:

啊。

class b;
class a

  public:
    a();
    bool skeletonfunc(b temp);

但是,在许多情况下,这可能会迫使您在方法调用或成员变量中使用引用或指针,因为您不能在两个类头中都有完整的类型。如果必须知道类型的大小,则需要使用引用或指针。但是,如果只需要方法声明,则可以使用该类型。

【讨论】:

确保您注意到您需要使用指针或引用来引用任何前向声明的类型,如本示例所示 (b& temp)。 不,原始声明(具有传递值语义)将编译。您需要在方法定义之前进行完整的类声明,但不需要声明方法签名:class a; void f( a ); class a ; void f(a x) ... 参见 ***.com/questions/389957/…【参考方案2】:

使用前向声明:http://en.wikipedia.org/wiki/Forward_declaration

【讨论】:

以上是关于如何声明相互引用的类?的主要内容,如果未能解决你的问题,请参考以下文章

github上的每日学习 12

Django模型:两个类之间的相互引用以及在python中无法使用前向声明

如何在 CORBA IDL 中声明/使用对结构的前向引用?

C++ 类的前向声明的用法

TypeScript学习笔记 - 声明文件

两个类(C++)中的类到类转换 - 前向声明?