2009-09-06 6 views
0

버튼 클래스를 구현하고자하는 프로그램이 있습니다. button.h의 모든 변수를 선언하고 button.cpp의 모든 메서드를 정의했으며 WINMAIN에서 이러한 함수를 호출하면 다음 오류가 나타납니다.VC++의 링크 오류 LNK2005

keylogger.obj : 오류 LNK2005 : "구조체 HBITMAP__ * hOldBmp"이미

오류가 여러 해상력 hOldBmp입니다하지만 그것은 단지에 정의되어 Button.obj에 정의 (hOldBmp @@ 3PAUHBITMAP __ @@?) button.h

답변

0

"button.h에서만 정의되었습니다"는 정확하게 문제입니다. extern로 선언하고 C++ 소스 파일 (헤더 파일 아님)에 정의를 넣지 않는 한, 모든 번역 단위는 변수에 대한 자체 정의를 갖게됩니다.

0

두 개의 .obj 파일 (이 두 개의 cpp 파일)에서이 hOldBmp 포인터의 구현을 포함합니다. 따라서 두 obj 파일에는이 포인터를 구현하는 코드가 들어 있습니다. 링커는 최종 구현에서 사용할 구현을 결정할 수 없습니다.

해결책 : 헤더 파일에 선언 만 남겨 두십시오. extern을 선언하거나 버튼 클래스의 멤버 변수 static으로 만들 수 있습니다. 정의을 cpp 파일에 넣으십시오.