책에서 배운 그대로 프로그래밍하였는데
왜 에러가날까?
바로 선언과 정의 파일을 나누어 만들었기 때문이다.
간단한 예를 보도록 하자.
<Pos.h> 헤더파일에서 선언을
<Pos.cpp> 파일에서 정의를
<test.cpp> 메인함수에서 실행
보이는것과 같이 error LNK2019 에러 발생.
위 문제의 해결을위해 클래스 템플릿의 선언과 정의를 구분하지 않고 한곳에서 해보기로 하겠다.
Pos.cpp 파일을 제거후에 헤더파일에 주석(/* */) 부분 제거후 재 실행.
<Pos.h> 선언과 정의를 한번에한 헤더파일
위에 사용한 메인함수와 같음(변경x)
<실행결과> 문제없이 컴파일이 되었다.
- 결론
" C++ (Template)템플릿을 사용하여 구현한 코드는 선언과 정의를 같은 파일에서 해야한다. 왜냐면 컴파일할때 템플릿 소스코드를 만들어내는데 이때 템플릿의 정의가 헤더파일과 Cpp 파일에 나뉘어져있으면 제대로 템플릿 코드가 생성되지 않을 수 있기 때문이다. (런타임시 소스코드를 만들어내는게 아님) "
물론 Cpp파일을 메인Cpp파일이 컴파일시 참조할수 있도록 include 해주면 되긴한다. 하지만 그냥 편하게 헤더파일 하나에다가 정의해서 쓰도록 하자. 귀찮다.
댓글 없음:
댓글 쓰기