블로그 이미지
SITD

카테고리

분류 전체보기 (34)
1.DB (4)
2.OS (3)
3.PROGRAMMING (14)
4.학업 (0)
5.영어 (0)
6.KSIT (5)
7.증권 (1)
8.EXCEL (0)
9.Graduate (2)
기타 (5)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

태그목록

최근에 올라온 글

결론만 간단히, .h파일에 넣어서 처리했다.

템플릿 함수의 경우 h에 선언을 넣고 cpp에 정의를 넣었을 때,

오브젝트 파일 만들 때는 오류가 발생하지 않지만, 다른 소스에서 해당 헤더를 참조하여 컴파일할 때 오류가 발생한다.

이런 함수는 선언된 적이 없다는 오류인데(undefined reference to), 

해결 방법은 3가지 정도 있는 듯 하다

1. template(typename T> 위에 export를 둔다

2. #include "xx.cpp" 를 추가한다.

3. 헤더 파일이 구현 부를 넣는다.

이중 1번은 export를 수행하는 컴파일러가 있는지 없는지도 불분명할 정도로 보편적이지 않고, 옳지 않다는 의견이 많다.
2번은 표준에 상당히 위배된 느낌이라서 3번을 사용했다.
템플릿 함수의 특성 때문에 헤더 파일에 소스를 추가할 경우, 확장자를 hpp로 하자는 의견도 있는데(출처 2) 여기까진 안했다.

컴파일 할 때 순서에 따른 문제가 아닐까 싶은데, 정확한 원인은 모르겠다.
단지, 템플릿 함수는 컴파일 타임에 템플릿 함수를 호출하는 객체들의 형태에 맞는 소스를 만든다고 들었다
(즉, typename T로 int, float, double이 들어간다면, 3가지 타입의 함수를 자동으로 만든다)
이게 .h에 있을 땐 가능한데(정확힌 include됐을 때), .cpp에 있을 땐 컴파일 타임에 못 만드는게 아닐까 싶다.



출처 1 :  http://ttriton.tistory.com/tag/undefined%20reference%20to
출처 2 :  
http://kldp.org/node/47258 
Posted by SITD
, |

최근에 달린 댓글

글 보관함