首页 > 后端开发 > C++ > 正文

当类相互引用时,如何处理 C 中的循环头依赖关系?

Susan Sarandon
发布: 2024-10-26 12:25:29
原创
399 人浏览过

How to Handle Circular Header Dependencies in C   When Classes Reference Each Other?

C 中相互包含的标头

在 C 中创建类相互引用的代码时,正确处理标头包含至关重要

包含语句放置

默认情况下,头文件包含在宏内(#ifndef 防护),以防止头文件相互引用时出现无限递归。在提供的示例中,将 #include 语句放在宏内可以解决每个类都包含另一个类的标头的问题。

转发声明

在所描述的情况下,编译器在它引用的 A 类之前遇到 B 类定义。要解决此问题,需要在 B 类定义之前对 A 进行前向声明:

<code class="c++">class A;  // Declare A's existence</code>
登录后复制

这告知编译器 A 是一个类,此时不需要其完整定义。

修订后的代码

以下是包含前向声明和内部宏包含的修订后代码:

<code class="c++">// A.h
#ifndef A_H_
#define A_H_

#include "B.h"

class A; // Forward declaration

class A
{
    private:
        B b;

    public:
        A() : b(*this) {}
};

#endif /*A_H_*/

// B.h
#ifndef B_H_
#define B_H_

#include "A.h"

class B
{
    private:
            A& a;

    public:
        B(A& a) : a(a) {}
 };

#endif /*B_H_*/</code>
登录后复制

通过遵循这些准则,类可以引用每个其他正确,evitando 编译错误。

以上是当类相互引用时,如何处理 C 中的循环头依赖关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!