2011-07-04 7 views
-2

가능한 중복 : 비슷한 질문을 반복하는
What is the correct way of using extern for global variables ?이 상황에서 전역 변수를 선언하는 방법은 무엇입니까?

죄송합니다. p을 반대하는

//object.h 
object p; 



//b.h 
#include object.h 



//b.cc 
extern object p; 


//c.h 
#include object.h 
#include b.h 

//c.cc 
extern object p; 


//main.cc 
#include c.h 
extern object p; 
int main() {} 

는 기본적으로 나는 cbmain 모두가 액세스 할 수 있어야합니다. Object 클래스 헤더에 액세스하려면 b 및 bc의 메서드에 액세스해야합니다. 전역 변수 p를 선언하는 방법은 무엇입니까? 위의 코드에서 다중 정의 오류가 발생합니다. 너무 길기 때문에 전체 코드를 게시 할 수는 없지만 위의 상황을 잘 설명한다고 생각합니다.

+0

그 게시물은 내 질문에 완전히 대답하지 못해 죄송합니다. – Mark

+0

Xeo의 게시물은 여기에서 귀하의 질문에 정확하게 대답합니다. 유일한 것은 파일 이름입니다 (예 : a.h 대신 object.h). – interjay

+0

그의 대답에 나는 object.cc가 없습니다 .cc. – Mark

답변

1

에 글로벌 변수를 선언하면 .cc 개의 파일 중 하나만입니다. 해당 extern 선언을 해당 .h 파일에 넣은 다음 전역 변수에 액세스해야하는 모든 다른 .cc에 해당 파일을 포함시킵니다.

그 방법에서, 변수 마다 .cc합니다 (.h에서 extern 선언 #include D 덕분)에를 선언하지만, 는 단일 .cc에서 정의 될 것이다. 한편

, 당신은 그렇지 않으면 당신은 (그들이 static로 선언되었다 즉 그들은 내부 연결했다를 제외하고 연결하는 동안 여러 정의 오류를 얻을 것이다, 헤더에 글로벌 변수를 정의하지해야하지만하지 않습니다 지금 헤더에 정의 된 static 변수가 있어야 함).

그런데 컴파일 단계에서 여러 정의 오류가 발생하지 않도록 헤더에 포함 된 가드를 사용해야합니다.

+0

이 질문에 대한 답변입니다. 감사 – Mark

관련 문제