C++ template는 source파일에 주면 link가 안되는 경우도 있다.
이 때는 header 파일에 적도록 한다.
예제)
$ cat b.h
#include <iostream>
template <typename T>
void b(T val);
$ cat b.cpp
#include "b.h"
template <typename T>
void b(T val)
{
cout << val << endl;
}
$ cat a.cpp
#include "b.h"
#include <iostream>
int main()
{
b(10);
return 0;
}
컴파일 결과)
g++ -g -Wall a.cpp b.cpp
/tmp/ccc56fWm.o(.text+0x16): In function `main':
/svc/neo/work/template_test/a.cpp:6: undefined reference to `void b<int>(int)'
collect2: ld returned 1 exit status
make: *** [all] 오류 1
이 때 b.cpp의 내용을 전부 b.h로 옮겨주면 정상적으로 컴파일 된다.
GNU STL(standard template library)도 대부분의 template이 header file에 들어가 있다.
(/usr/include/g++3/ 파일들을 보라.)
컴파일러에 따라 link과정에서 template을 제대로 인식하지 못하는 경우가 있다.
댓글 없음:
댓글 쓰기