Written on
·
472
·
Edited
1
선생님께서 45분 쯤에 말씀하셨던 코드들을 좀 더 이해해보고 싶어서 이렇게 해보았습니다.
<Header File constant.h>
#pragma once
namespace Constants {
extern const double pi(3.141592);
extern const double gravity(9.8); }
<test.cpp>
#include <iostream>
#include "constant.h"
void doSomething() {
using namespace std;
cout << "In test.cpp " << Constants::pi << endl;
}
<main.cpp>
#include<iostream>
#include "constant.h"
using namespace std;
void doSomething();
int main() {
cout << "In main.cpp file " << Constants::pi << endl;
doSomething();
return 0; }
여기서 궁금한 점이 헤더파일 안에 있는 const 변수들 앞에 extern이 없으면 아무런 문제가 없지만,
extern을 붙이면 문제가 발생합니다..왜 extern을 붙이기만 하면 오류가 발생하는 것일까요...?
extern linkage도 결국에는 전역 변수 중 하나인데 말입니다...
Answer 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
선언과 정의가 분리되지 않았기 때문입니다.
헤더 파일에 extern
상수를 선언을 함과 동시에 초기화를 하면, 이 헤더 파일이 여러 소스 파일에서 포함되었을 때 해당 상수가 여러 번 정의되었다고 받아들이게 됩니다.
따라서 링킹 시점에서 다중 정의 에러가 발생하게 됩니다.