오류 LNK2005: 다중 정의
Win32 콘솔 응용 프로그램에는 각각 A.cpp와 B.cpp라는 두 개의 소스 파일이 있습니다. 다음 코드가 포함되어 있습니다:
<code class="cpp">#include "stdafx.h" int k;</code>
컴파일 시 오류가 발생했습니다.
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
설명:
이 오류는 다음 코드를 위반하여 발생합니다. 하나의 정의 규칙. C에서 모든 전역 변수 또는 함수는 모든 번역 단위(소스 파일)에서 단일 정의만 가질 수 있습니다. 귀하의 경우 A.cpp와 B.cpp는 모두 변수 k를 정의하므로 여러 정의와 연결 오류가 발생합니다.
해결책:
이 문제를 해결하려면 , 다음 옵션을 고려하세요.
1. 익명 네임스페이스 사용:
K 변수를 A.cpp와 B.cpp 모두에서 사용해야 하지만 외부 연결을 피하고 싶다면 익명 네임스페이스를 활용할 수 있습니다.
<code class="cpp">namespace { int k; }</code>
2. extern 사용:
여러 파일에서 변수 k를 공유해야 하는 경우 이를 헤더 파일(A.h)에서 extern으로 선언하고 하나의 소스 파일(예: A.cpp)에서 정의해야 합니다. ):
A.h
<code class="cpp">extern int k; </code>
A.cpp
<code class="cpp">#include "A.h" int k = 0;</code>
B.cpp
<code class="cpp">#include "A.h" // Use `k` within B.cpp</code>
이러한 솔루션을 따르면 k의 다중 정의를 방지하고 애플리케이션을 성공적으로 컴파일할 수 있습니다.
위 내용은 Win32 콘솔 응용 프로그램에서 \"오류 LNK2005: 다중 정의\" 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!