> 백엔드 개발 > C++ > 본문

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

DDD
풀어 주다: 2024-10-30 08:39:27
원래의
919명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!