>  기사  >  백엔드 개발  >  내 Win32 콘솔 응용 프로그램에 \"오류 LNK2005: \"int k\"가 이미 정의되었습니다\"가 나타나는 이유는 무엇입니까?

내 Win32 콘솔 응용 프로그램에 \"오류 LNK2005: \"int k\"가 이미 정의되었습니다\"가 나타나는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-30 08:39:27920검색

Why Am I Getting

오류 LNK2005: "int k"가 이미 정의됨

Win32 콘솔 애플리케이션을 여러 C 파일과 연결하면 "오류 LNK2005: A.obj"에 이미 정의된 "int k"(?a@@3HA)가 발생할 수 있습니다. 이 오류는 여러 파일에 동일한 이름의 변수가 정의된 경우 발생합니다.

주어진 예에서 A.cpp와 B.cpp는 모두 변수 k를 정의합니다. 단일 정의 규칙에 따르면, 각 전역 변수나 함수는 단일 정의를 가져야 합니다. 정의가 여러 개 있으면 모호함과 연결 오류가 발생합니다.

해결책:

이 오류를 해결하려면 다음 접근 방식을 사용할 수 있습니다.

이름 없는 네임스페이스 사용(익명 네임스페이스):

k 변수를 각 파일에 비공개로 설정하려는 경우 기호 이름 충돌을 방지하기 위해 이름 없는 네임스페이스를 사용하세요.

<code class="cpp">namespace 
{
    int k;
}</code>

이것은 각 파일 내의 기호 k를 격리하여 다른 파일이 이에 액세스하거나 재정의하는 것을 방지합니다.

별도의 파일에서 변수 선언 및 정의:

공유해야 하는 경우 여러 파일에 걸쳐 변수 k를 사용하려면 extern을 사용하여 헤더 파일에서 이를 선언하고 별도의 컴파일 단위로 정의하세요.

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` anywhere in the file</code>

헤더 파일에 k를 extern으로 선언하면 다른 파일에서 접근하여 사용할 수 있다. 재정의하지 않고.

위 내용은 내 Win32 콘솔 응용 프로그램에 \"오류 LNK2005: \"int k\"가 이미 정의되었습니다\"가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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