C++ 中的前向引用或声明

Posted

技术标签:

【中文标题】C++ 中的前向引用或声明【英文标题】:Forward Referencing or Declaration in C++ 【发布时间】:2008-10-08 17:29:19 【问题描述】:

如何在 C++ 中进行前向引用/声明以避免循环头文件引用?

我在头文件中有#ifndef 保护,但记忆告诉我我需要这个前向引用的东西 - 我以前用过 >

【问题讨论】:

【参考方案1】:

你预先声明了类而不包括它。例如:

//#include "Foo.h" // including Foo.h causes circular reference
class Foo;

class Bar

...
;

【讨论】:

在这种情况下还要注意:类 Bar 不能包含类 Foo,但它可以有一个指向类 Foo 的指针。 另请注意,函数的正式返回类型可以是前向声明类型。【参考方案2】:

我相信您所说的正确术语是“前向声明”。 “前向引用”会有点混乱。

【讨论】:

【参考方案3】:

如果您有#ifndef 保护,您将不会获得循环头文件引用。这才是重点。

前向引用用于避免仅通过指针或引用使用的对象的#include(ing) 头文件。但是,在这种情况下,您并没有解决循环引用问题,您只是在练习良好的设计并将 .h 文件与其不需要知道的细节解耦。

【讨论】:

这不准确。前向引用可以取代#include 的需要,从而消除#include 循环的需要。 我同意,如果您没有 #ifndef 保护,您可能(草率地)尝试使用前向声明来管理所有循环标头依赖项,但是 OP 说他确实有标头保护。

以上是关于C++ 中的前向引用或声明的主要内容,如果未能解决你的问题,请参考以下文章

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

什么是 C++ 中的前向声明?

C++ 简单循环引用和前向声明问题

20210421-C++的前向声明

C++ 中嵌套类型/类的前向声明

在另一个文件c ++中的前向声明