2010-08-23 6 views
3

내 목표 모듈은 X.cppY.cpp에서 건설 될 실행하고,이 두 개의 파일은 일반적인 .h 파일이 필요합니다 :헤더 파일에서 두 개의 .cpp에 사용할 변수를 선언하는 방법은 무엇입니까?

Y.obj : error LNK2005: "struct IMediaSample * pSave" ([email protected]@[email protected]@A) already defined in X.obj 
: 나는 모듈을 만들 때, 내가 말하는 오류가 발생했습니다

extern HANDLE hPipe; 
extern IMediaSample *pSave = NULL; 

이 문제를 해결하는 방법은 무엇입니까?

답변

14
extern IMediaSample *pSave = NULL; 

이 단지 선언이 아니다. 그러면 pSave에서 NULL으로 정의됩니다. .cpp에 모두 .h이 포함되어 있으므로이 변수는 2 개의 번역 단위로 정의되므로 충돌이 발생합니다.

당신은 다음 정확히 하나 .cpp의의에 IMediaSample *pSave = NULL;를 추가 .h에서

extern IMediaSample *pSave; 

로 다시 작성해야합니다.

0

ifndef 문을 사용해보십시오. 사용 일이 등을 포함하는 동안 다음 만든 각 헤더 파일에 변수 고유의 정의 :

#ifndef commonh 
include common.h 
#endif 
+0

이미이 트릭을 시도했지만 작동하지 않습니다. – Alan

+4

가드 포함은 다른 소스가 아닌 동일한 소스 파일 *에 헤더 곱하기 *를 포함하지 못하게합니다. –

+0

헤더 파일에 포함 가드를 넣지 않으면 ... – TJMonk15

관련 문제