> 백엔드 개발 > C++ > 여러 C 파일에서 동일한 변수를 정의할 때 \'error LNK2005: 이미 정의되었습니까?\' 오류가 발생하는 이유는 무엇입니까?

여러 C 파일에서 동일한 변수를 정의할 때 \'error LNK2005: 이미 정의되었습니까?\' 오류가 발생하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-30 01:43:29
원래의
843명이 탐색했습니다.

Why am I getting the

오류: "오류 LNK2005: 이미 정의되어 있습니까?"

콘솔 애플리케이션에서 A.cpp 및 B.cpp 파일을 컴파일하는 동안 예기치 않은 오류가 발생했습니다. . 두 파일 모두 다음 코드를 포함합니다.

#include "stdafx.h"
int k;
로그인 후 복사

그러나 컴파일 과정에서 오류가 발생합니다.

Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
로그인 후 복사

이 오류는 "단일 정의 규칙" 위반으로 인해 발생합니다. C에서는 각 변수, 함수 및 개체를 한 번만 정의할 수 있습니다. 귀하의 경우 A.cpp와 B.cpp 모두에서 "k" 변수를 정의했습니다.

솔루션

이름 없는 네임스페이스 사용

원하는 경우 두 파일 모두에서 동일한 이름의 변수를 사용하려면 이름 없는 네임스페이스(익명 네임스페이스)를 활용하여 충돌을 피할 수 있습니다.

namespace
{
    int k;
}
로그인 후 복사

네임스페이스 내에 "k"를 캡슐화하면 해당 범위를 다음으로 효과적으로 제한할 수 있습니다.

외부 선언 사용

여러 파일에서 "k" 변수를 공유하려는 경우 외부 선언 및 정의 기술을 사용할 수 있습니다.

A.h(헤더파일)

extern int k;
로그인 후 복사

A.cpp

#include "A.h"
int k = 0;
로그인 후 복사

B.cpp

#include "A.h"

// Use 'k' variable as needed
로그인 후 복사

이 시나리오에서는 A.h에서 변수를 외부로 선언하고 A.cpp에서 정의합니다. 변수에 액세스하려면 B.cpp 파일에 A.h만 포함하면 정의 충돌을 피할 수 있습니다.

위 내용은 여러 C 파일에서 동일한 변수를 정의할 때 \'error LNK2005: 이미 정의되었습니까?\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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