큰 C++ 프로젝트에서 작업하고 다른 사람의 코드를 변경하고 있습니다. 이 과정에서 참조 번호 VarA
이 여러 개 정의되었다는 링커 오류가 발생했습니다. 해당 변수를 찾았고 프로젝트에 직접 포함 된 cpp 파일에 정의되어있었습니다. 원본 파일을 헤더 파일과 소스 파일로 변환하려고 시도했지만 작동하지 않습니다. 이상한 연결 오류
H 파일 (aaa.h)
#ifndef AAA_H
#define AAA_H
#include "classAdefinition.h"
extern ClassA VarA;
#endif
CPP 파일
#include "aaa.h"
ClassA VarA;
지금은 주 파일에 aaa.h
을 포함하는 경우, 링커 오류가 오류 메시지에 대한 새로운 생성 aaa.obj
을 추가 (aaa.cpp) (예 : VarA
도 거기에 정의되어 있습니다.) 이것은 내가 기대했던 것입니다. 하지만 기본 파일에서 VarA
의 정의를 제거하면 링커 오류가 발생하여 VarA
이 정의되지 않아 혼란 스럽습니다.
누군가이 행동의 원인이 될 수있는 단서가 있습니까?
VS2008을 사용 중이며 프로젝트는 cmake
으로 생성됩니다. 이것이 문제의 원인일까요? 예 : 구성 문제가있을 수 있습니까? 우리는 또한 템플릿을 자주 사용합니다. 문제가 생길 수 있습니까?
"메인 파일에서'VarA'의 정의를 지울 때'aaa.cpp'를 여전히 나머지 파일에 링크하고 있습니까? – Shahbaz
나는 그렇게 생각한다. 그러나 나는 절대적으로 확신하지 못한다. 앞서 언급했듯이 우리는 cmake를 사용하여 프로그램을 작성합니다. 하지만 VarA를 제거 할 때 cmake 구성을 변경하지 마십시오 –