C에서 서로를 포함하는 헤더
C 헤더 파일은 서로를 포함할 수 있지만 컴파일 오류를 방지하려면 특정 지침을 따라야 합니다.
Include 문 배치
앞으로 선언
두 클래스 A와 B가 서로를 포함하는 다음 코드를 고려하세요.
<code class="cpp">// A.h #ifndef A_H_ #define A_H_ #include "B.h" class A { public: A() : b(*this) {} private: B b; }; #endif</code>
<code class="cpp">// B.h #ifndef B_H_ #define B_H_ #include "A.h" class B { public: B(A& a) : a(a) {} private: A& a; }; #endif</code>
이 시나리오에서는 컴파일러가 클래스 B를 먼저 발견하지만 A는 아직 선언되지 않았습니다. 이 문제를 해결하려면 A의 순방향 선언이 B 정의 앞에 포함되어야 합니다.
<code class="cpp">// B.h #ifndef B_H_ #define B_H_ class A; // Forward declaration of class A #include "A.h" class B { public: B(A& a) : a(a) {} private: A& a; }; #endif</code>
이 전방 선언은 A가 완전한 정의임에도 불구하고 A가 클래스임을 컴파일러에 알립니다. 은 아직 사용할 수 없습니다.
실습
일반적으로 #include 문은 include 가드 안에 배치해야 하며 헤더가 참조해야 할 경우 전방 선언을 사용해야 합니다. 나중에 포함된 헤더에 정의되는 클래스로. 다음 지침을 따르면 순환 포함으로 인해 발생하는 컴파일 오류를 피할 수 있습니다.
위 내용은 C에서 원형 헤더 포함을 어떻게 피할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!