• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

링크 에러 질문입니다.

22.10.09 18:46 작성 조회수 126

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

constant.h.jpg

main.cpp.jpgtest.cpp.jpg

다음과 같이 코드를 작성하면

 

  • Error LNK1169 one or more multiply defined symbols found

  • Error LNK2005 "double Constants::pi" (?pi@Constants@@3NA) already defined in main.obj Chapter4_3

다음과 같은 에러들이 뜨는데요, constant.h 의 pi값을 const값으로 정의해주면 잘 돌아갑니다. const로 정의했을때와 const없이 변수로 정의했을때 왜 저러한 차이가 발생하는지 궁금합니다!

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.10.10

일단 오류가 발생한 이유부터 생각해보시고 const의 의미를 생각해보시면 도움이 될 것입니다.

오류가 발생한 이유는 constant.h에서 정의한 pi가 중복 선언되어 발생한 문제입니다.

pi가 일반 변수로 선언되면 main.cpp 에서 include하여 사용한 "constant.h"

test.cpp에서 include하여 사용한 "constant.h"의 pi는

각기 따로 정의되어 충돌이 발생하는 것입니다.

(doSomething()에서 링크 에러가 발생한 이유 ==> main에서 이미 pi가 정의되었기 때문)

 

constant.h, main.cpp, test.cpp 모두를 단순히 독립적인 컴파일 대상이라고 생각해보시면

이해에 도움을 도움을 받을 수 있을 것입니다.

const로 선언하면 해당 값은 스택 영역이 아닌 데이터 영역에 적재됩니다.

동일한 메모리 번지를 참조하기 때문에 중복 선언이 되지 않는 것입니다.