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 중국어 웹사이트의 기타 관련 기사를 참조하세요!