2008-10-08 3 views
4

순환 헤더 파일 참조를 피하기 위해 C++에서 전달 참조/선언을 수행하려면 어떻게합니까?C++에서 순방향 참조 또는 선언

나는 헤더 파일에 #ifndef 가드를 가지고 있지만, 메모리는 앞으로 참조 할 것이 필요하다는 것을 알려줍니다. 전에 사용했던 코드는 <이지만 기억하지는 못합니다.

답변

15

클래스를 포함하지 않고 미리 선언하십시오. 예를 들면 다음과 같습니다.

//#include "Foo.h" // including Foo.h causes circular reference 
class Foo; 

class Bar 
{ 
... 
}; 
+0

이 경우에도주의해야합니다. class Bar는 Foo 클래스를 포함 할 수 없지만 Foo 클래스에 대한 포인터를 가질 수 있습니다. – KPexEA

+0

함수의 공식 반환 유형은 전달 선언 유형 일 수 있습니다. – QBziZ

-2

#ifndef 가드가있는 경우 원형 헤더 파일 참조가 표시되지 않습니다. 그것이 요점입니다.

전달 참조는 포인터 또는 참조로만 사용하는 개체에 대한 헤더 파일을 # 포함하지 않으려는 경우에 사용됩니다. 그러나이 경우 원형 참조 문제를 해결하지 않고 단지 좋은 설계를 연습하고 알 필요가없는 세부 정보에서 .h 파일을 분리합니다.

+0

정확하지 않습니다. forward 참조는 #include에 대한 필요성을 대체 할 수 있으므로 #include circle이 필요하지 않습니다. – shoosh

+2

#ifndef 경비원이 없다면 앞으로 선언문을 사용하여 모든 순환 헤더 종속성을 관리하려고 시도 할 수도 있지만 OP에서는 헤더 가드가 있음을 동의합니다. –

1

나는 당신이 말하는 것에 대한 정확한 용어는 "전방 선언"이라고 믿습니다. "전방 참조"는 다소 혼란 스러울 것입니다.

관련 문제