반응형

template을 사용하여 피라메터로 들어온 값을 계산하고 피라메터로 받은 range에 따라 true/false 반환하는 함수를 만들었는데


LINK2019 에러가 자꾸 발생한다.


구글링해보니 선언만 있고 정의가 없을때 발생한다는데 .h와 .cpp에 선언과 정의 잘 되어 있는데 자꾸 에러가 나서 삽질만 반나절 했다.


점심 먹고 들어와서 다시 템플릿은 클래스가 아니다 말그대로 '틀'일 뿐이다, 라는 설명과 함께 한곳에서 선언과 정의가 이뤄저야 한다는 것이다.


이것이 뭔말이냐 하면 그냥 헤더파일에 선언과 함께 동시에 정의까지 해버리라는거다.


선언부 ( test.h)

 template< typename type > extern bool IsInRange(type _min, type _max, type _val);

정의부 (testcpp)

template< typename type > bool IsInRange(type _min, type _max, type _val)
{
	return ((_min <= _val) && (_val <= _max)); 
}

위와 같이하면 LINK2019 에러 발생한다.


따라서 아래와 같이 헤더파일에 선언 정의 동시에 해줘야 한다.


template< typename type > extern bool IsInRange(type _min, type _max, type _val){ return ((_min <= _val) && (_val <= _max)); }


물론 선언과 정의를 따로 하는 방법도 있을것이다. 


헤더에 정의를 해도 무방할정도의 짧은 코드이기 때문에 이 방법을 사용한것이다.







+ Recent posts