2011-12-29 3 views
0

main 기능을 가진 example1.cpp 파일이 하나 있습니다. 이 파일은 #include mylib.h#include lib.h이어야합니다. 파일 mylib.h#include lib.h입니다. 이 프로그램을 컴파일하려고하면 redefinition xyz function 오류가 발생합니다.기능 재정의

example1.cpp

#include mylib.h 
#include lib.h 

int main(){ 
//code 
} 

mylib.h

#include lib.h 

//rest code 
+3

코드를 표시하고 복사/붙여 넣기를 사용하여 실제 오류 메시지를 표시하십시오. –

+3

포함 가드를 사용하고 있습니까? –

+0

@ userr902691이 중 하나가 문제를 해결 한 경우 귀하의 문제를 가장 잘 해결하는 대답을 [수락] (http://stackoverflow.com/faq#howtoask)에 잊지 마시기 바랍니다. –

답변

4

당신은 redifinitions을 피하기 위해 # 정의의 .H 파일을 포장해야합니다. 예 :

#if !defined(_MY_LIB_H_) 
#define _MY_LIB_H_ 

// Add your function definitions here... 

#endif // _MY_LIB_H_ 

이제 어디서나 포함 할 수 있으며 함수 정의를 한 번 읽습니다. 또한 컴파일러에 따라 #ifndef를 사용할 수 있습니다. 이 경우

#if _MSC_VER > 1000 
#pragma once 
#endif 

, 당신은 # 정의는 위에서 설명한 사용할 필요가 없습니다 : 예를 들어, VC++, 그것은 버전 10 이상 인 경우 "한번의 #pragma"할 수 있습니다.

+4

'_MY_LIB_H_'에서 선행 밑줄을 제거해야합니다. C++ 98 표준 인 17.4.3.1.2는 다음과 같이 말합니다. "두 개의 밑줄을 포함하거나 밑줄로 시작하고 그 다음에" "의 대문자로 시작하는 각 이름은 구현을 위해 예 약되어 있습니다." –

+1

마찬가지로 C99 및 C11 표준에도 절이 있습니다 (질문에 C 및 C++ 태그가 지정됨). – dreamlax

7

컴파일 중에 여러 번 포함되지 않도록하려면 헤더 파일에 include guards을 넣어야합니다.

#ifndef LIB_H 
#define LIB_H 

// Actual header file code 

#endif