inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C++

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

링크 에러 질문입니다.

231

asczxvxzvxc

작성한 질문수 2

0

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

 

constant.h.jpg

main.cpp.jpgtest.cpp.jpg

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

 

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

C++

답변 1

0

강민철

일단 오류가 발생한 이유부터 생각해보시고 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로 선언하면 해당 값은 스택 영역이 아닌 데이터 영역에 적재됩니다.

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

 

변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠

1

483

1

메모리 주소 10진수로 출력

1

673

1

클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.

1

520

1

여러가지 리턴 타입에 관한 강의가 어떤 걸까요?

1

550

1

메모리 주소에 관한 질분

0

689

1

인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.

0

558

1

형변환 오버로딩에서 const 관련 질문이 있습니다.

0

450

1

Digit 뒤에 reference를 사용하는 이유

0

515

1

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

0

329

1

dat파일이...

0

544

1

TODO:대입 연산자 오버로딩에 대한 소스코드입니다.

0

654

1

복사 생성자 관련 질문이 있습니다.

0

459

1

수업 중 궁금한점이 있습니다.

1

395

1

라이브러리자체가 이해가 되지 않습니다.

0

570

1

마지막 예제 질문

0

308

1

증감연산자 위치에 따른 수행 순서 질문입니다.

0

384

1

단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.

1

420

1

friend함수 관련 질문이 있습니다.

0

317

1

operator+ 정의부분에서 궁금한 것이 있습니다.

0

452

1

3분 17초 질문

0

358

1

함수에 값을 대입한다는 개념이 이해가 되지 않습니다.

0

454

1

int getvalue() const에서 const는 왜 뒤에 붙는건가요?

0

457

2

const Something &st에서 const를 빼면 안되나요?

0

307

1

friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??

1

499

1