首页 >后端开发 >C++ >当类相互引用时,如何处理 C 中的循环头依赖关系?

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

Susan Sarandon
Susan Sarandon原创
2024-10-26 12:25:29461浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn