>  기사  >  백엔드 개발  >  Win32 콘솔 응용 프로그램에서 \"오류 LNK2005: 다중 정의\" 오류가 발생하는 이유는 무엇입니까?

Win32 콘솔 응용 프로그램에서 \"오류 LNK2005: 다중 정의\" 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-31 00:45:02852검색

Why am I getting the

오류 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.