처음부터 차근차근

~가 ~에 이미 정의되어 있습니다.(C언어) 본문

Error&Warning

~가 ~에 이미 정의되어 있습니다.(C언어)

_soyoung 2022. 4. 29. 17:54
반응형

"struct object * obj" (?obj@@3PAUobject@@A)이(가) head.obj에 이미 정의되어 있습니다.

파일 분할 후 컴파일 하려했더니 생긴 오류이다.

 

오류의 원인

헤더파일을 만들어 파일 분할을 했을때 변수가 중복 선언되서 발생

 

해결 방법 

헤더 파일 안에다 전역변수를 선언하지 않으면 된다.

필자의 경우 구조체를 정의하고 그 밑에다 구조체 변수를 바로 선언해버려서 이러한 오류가 생겼다.

 

뿐만아니라 헤더 파일 안에다 전역변수를 선언하면 안되는 이유가 더 있다.

헤더 파일에 전역 변수를 선언했을 때 헤더 파일을 사용하는 소스 파일이 하나라면 문제가 없지만,

여러 소스 파일에서 헤더 파일을 사용하면 컴파일 에러가 발생하게 된다.

왜냐하면 소스 파일에서 헤더파일을 포함할 때마다 전역 변수가 계속 생겨나게 되기 때문이다.

즉, 변수 이름은 같은데 서로 다른 변수인 상황이 된다.

 

그러므로 전역 변수는 소스 파일(예시 : .cpp)에 선언해야한다.

만약 다른 소스 파일 전역변수를 사용해야 한다면

사용하고자 하는 소스파일에서 extern 키워드를 앞에 쓴다음 사용해야 한다.

 

 

 

참고 : https://dojang.io/mod/page/view.php?id=797 

반응형
Comments