当我已经包含相关的头文件时,为什么还需要对类使用前向声明?它解决了我的问题,但让我感到困惑!
基本上 A 类需要了解 B 类,反之亦然。在包含前向声明之前,我收到错误“sytax error - identifier”。我的印象是包含一个头文件本质上意味着你在声明你放置#include 的其他类。
最佳答案
当你有一个循环包含依赖,并且你正确地使用了包含守卫(正如你所清楚的那样),那么由于没有无限循环包含,编译器必须在某个时候停止,它不会'不知道其他标题的内容。当您添加前向声明时,它能够编译您的代码。
例如,A
包含B
。然后 B
包含 A
,但是 A
' 包含 guard 踢进来并阻止它被第二次计算。然后它回到 B
中,此时它不知道来自 A.h
的任何内容,因为包含保护阻止了它的包含。然而,前向声明周围没有任何 include 守卫,因此它会照常进行。
循环依赖本身并没有错,但我总是建议重新审视您的设计,看看是否可以将逻辑分解到第三个类中。前向声明是防止无限循环依赖的 C++ 机制。
关于c++ - 前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757519/