2013-03-04 2 views
10

동일한 파일을 포함하여 여러 파일이있을 때 헤더 가드를 올바르게 사용하지 않으면이 오류가 발생합니다. 내 경우에는, 이것은 오류의 원인 트리 포함입니다 : 단지함수가 .obj에 이미 정의되어 있습니다.

blahblah.obj: error LNK2005: class some::namespace::ObjectType Object already 
    defined in dialogDlg.obj 

내가 : 어떤 #pragma once 년대없이

File A includes Z, which contains the functions I need. File B includes A, and file C includes A.

을,이 프로그램은 같은 오류의 변화의 무리를 준다 내가 포함하는 나무를 감안할 때 이것이 적절하게 컴파일되도록하는 적절한 방법은 무엇인지 궁금합니다.

파일 Z에서 #pragma once을 사용해 보았지만 제대로 작동하지 않았습니다. 또한 #pragma를 한번 시도해 보았습니다. 마지막으로 나는 A와 Z 모두에서 그것을 시도했으나 작동하지도 않았다.

+0

뭔가 나에게 별도의 헤더 파일을 사용하지 않는 아이디어를 제공 ?? –

답변

12

변수를 헤더 파일에 정의하려고합니다. 헤더 파일이 여러 소스 파일에 포함되어 있으면 각 소스 파일에 정의되므로 오류가 발생합니다.

대신 으로 지정하고 extern으로 지정한 다음 소스 파일 중 하나에 정의하십시오. 그래서 헤더 파일에

:

extern ObjectType Object; 

그리고 소스 파일에

:

ObjectType Object; 
+2

나는 이것이 가드를 포함하는 것과 아무 관련이 없다고 덧붙일 것이다. 가드 포함은 하나의 소스 파일에 동일한 헤더를 여러 번 포함하지 못하게합니다. * 다른 소스 파일에 포함되어서 헤더를 찾고 있습니다. – Angew

+0

좋아요. 그렇기 때문에 파일 B와 파일 C (둘 다 .cpp 파일)에서 이러한 변수와 개체에 액세스해야하는 경우이를 제대로 수행 할 수있는 방법이 있습니까? – xcdemon05

+1

b.cpp와 c.cpp를 함께 컴파일하는 한이 솔루션은 이미 원하는 것을 성취합니다. – us2012

관련 문제