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++ 中的前向引用或声明的主要内容,如果未能解决你的问题,请参考以下文章