c++ - 前向声明

标签 c++

当我已经包含相关的头文件时,为什么还需要对类使用前向声明?它解决了我的问题,但让我感到困惑!

基本上 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/

相关文章:

c++ - std::function 和 std::bind 行为

c++ - 从类函数返回对象 C++

c++ - 转发通用可调用对象的返回值

c++ - 为什么标准不允许定义下面的两个函数 `f`?

c++ - 在我的类 .cpp 文件 : "error: class ' Test' does not have any field named 'counter' "中类头和使用构造函数

c++ - boost 侵入列表 Hook

c# - 双多维数组,在C++中,最好的方法

c++ - std::vector 比普通数组快多少?

c++ - 如何在 Google Mock 中模拟返回类型为 unique_ptr 的方法?

c++ - 使用 scanf 的奇怪输出