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