전체 페이지뷰

2014년 10월 20일 월요일

C++ 템플릿 사용시 error LNK2019


책에서 배운 그대로 프로그래밍하였는데

왜 에러가날까?

바로 선언과 정의 파일을 나누어 만들었기 때문이다.


간단한 예를 보도록 하자.




<Pos.h> 헤더파일에서 선언을



<Pos.cpp> 파일에서 정의를


<test.cpp> 메인함수에서 실행


 보이는것과 같이 error LNK2019 에러 발생.

위 문제의 해결을위해 클래스 템플릿의 선언과 정의를 구분하지 않고 한곳에서 해보기로 하겠다.
Pos.cpp 파일을 제거후에 헤더파일에 주석(/*  */) 부분 제거후 재 실행.




<Pos.h> 선언과 정의를 한번에한 헤더파일



위에 사용한 메인함수와 같음(변경x)



<실행결과>  문제없이 컴파일이 되었다.


  • 결론
 " C++ (Template)템플릿을 사용하여 구현한 코드는 선언과 정의를 같은 파일에서 해야한다. 왜냐면 컴파일할때 템플릿 소스코드를 만들어내는데 이때 템플릿의 정의가 헤더파일과 Cpp 파일에 나뉘어져있으면 제대로 템플릿 코드가 생성되지 않을 수 있기 때문이다. (런타임시 소스코드를 만들어내는게 아님) "


물론 Cpp파일을 메인Cpp파일이 컴파일시 참조할수 있도록 include 해주면 되긴한다. 하지만 그냥 편하게 헤더파일 하나에다가 정의해서 쓰도록 하자. 귀찮다.









댓글 없음:

댓글 쓰기