콘솔 애플리케이션에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!