2009년 2월 7일 토요일

C++ template 사용 시 주의 점.

어떤 컴파일러에서는 template 을 사용한 클래스를 자동으로 생성하지 않는다. 즉 다음과 같은 template 을 사용하는 class 에서

template class TVector {
...
};

다음과 같이 사용한다고 하자.

...
TVector *foo = NULL;
...

이렇게 하는 경우, TVector 에 대한 클래스 정의가 없기 때문에 관련 메소드를 부르는 데 문제가 생긴다. 똑똑한 C++ 컴파일러의 경우 이 클래스 정의가 없더라고 자동으로 생성해서 없는 부분을 채워주기도 하지만 일부 컴파일러에서는 undefined symbol 에러가 발생한다. 이를 수정하기 위해서는 cpp 파일 어딘가에 다음과 같은 정의를 하면 된다.

template class TVector;

이와 관련된 게시물을 http://docs.freebsd.org/info/g++FAQ/g++FAQ.info.undefined_templates.html 에서 찾아볼 수 있다.

댓글 없음:

댓글 쓰기