2011-12-28 2 views
2

++ C에서 다양한 파일의 클래스를 포함합니다. 프로그램은 정상적으로 작동하지만 Logger 클래스의 Util 객체를 사용해야합니다. 그러나 내가 코드를 넣을 때 "Util.cpp"를 포함 시키십시오. g ++은 객체를 다시 호출 할 수 없기 때문에 오류가 발생합니다. 이클립스는 Util의 "재정의"와 "이전 선언"에 대해 나에게 이야기했다.내가 4 개 수업을 번 이상에게

어떻게 해결할 수 있습니까?

+0

http://en.wikipedia.org/wiki/Include_guard – Anycorn

+0

코드를 한 번만 입력해야합니다. 헤더의 상단에 이것을 추가 할 수 있습니다 :'#pragma once' –

+0

템플릿은 포함되지 않아야합니다 (템플릿이 아니라면 여기서는 그렇지 않습니다)! 항상 선언과 함께 헤더 파일 만 포함하십시오. – codeling

답변

7

소스 cpp 파일을 다른 cpp 파일에 포함하면 안됩니다.
기본적으로 이것은 One Definition Rule을 위반하여 재정의 오류가 발생합니다.

개체를 만들려는 클래스에 Util 클래스의 정의가있는 헤더 파일을 포함시킵니다. (: 템플릿 사용 코드 제외) :

기본적으로, 귀하의 코드는이 방식으로 구성되어야

Util.h ----------->는 같은 클래스의 정의 Util 행위를 포함 인터페이스
Util.cpp은 ----------->는 구현으로 클래스 Util 행위의 구현을 포함는 CL의 객체를 생성 할 때마다 여기에

컴파일러는 Util의 정의를 알고 있으므로 해당 cpp 파일에 Util.h을 포함하는 cpp 파일에 Util을 입력하십시오. 예를 들어

: 헤더 파일을 Include guards를 추가하는 것을 잊지 마세요, 또한

#include "Util.h" 

:
Server.cpp은 다음 Server.cpp이 같은 Util.h을 포함해야 Util의 객체를 만들려고합니다. 다른 소스/헤더 파일에 의해 Util의 사용은 다음 헤더 파일을 포함 할 필요가 없습니다 Util에 대한 포인터를 만드는 제한되어있는 경우

, 당신은 Forward declareUtil 클래스에 필요합니다.

+0

알았어. 하지만 내 경우에는 Logger.h에서 Util.cpp에서 사용할 Util 개체를 만들어야합니다. 어떻게 가능합니까? – user1056635

+0

@ user1056635 :'Logger.h'에'Util.h'를 포함 시키십시오, 위의 답변에서 같은 것을 설명했습니다. 그래서이 질문을한다면 당신은 내 대답을 이해했다고 생각하지 않습니다. 조심해서 읽어보십시오. * 이해 ** ** 당신이 undestand하지 않으면 ** 물어 **. –

+0

좋아, 알았어. 감사합니다. :) – user1056635

0

클래스를 .h 개의 파일 (또는 .hpp)로 선언하고 구현을`.cpp '파일에 넣습니다.

당신은 다른 .h/.hpp 또는 .cpp 파일 .h/.hpp 파일을 포함, 당신은 .cpp 파일을 포함하지 않습니다.

모든 헤더 파일은 다중 포함을 방지하는 가드이 있는지 확인하십시오, 헤더 파일의 첫 번째 줄은 .h/.hpp은 다음과 같아야합니다

#pragma once 
1

당신은 예를 Util.h을 위해 만 헤더 파일을 입력해야 아닌 .cpp 파일. 또한 포함 된 경비원을 사용하고 있는지 확인하십시오. 컴파일러에서 여러 정의에 대한 오류가 발생하면 포함 가드가 누락 된 것일 수 있습니다.