Перегрузка шаблона функции: ошибка ссылки - PullRequest
1 голос
/ 23 апреля 2010

Я пытаюсь перегрузить метод «display» следующим образом:

template <typename T> void imShow(T* img, int ImgW, int ImgH);
template <typename T1, typename T2> void imShow(T1* img1, T2* img2, int ImgW, int ImgH);

Затем я вызываю шаблон с unsigned char * im1 и char * im2:

imShow(im1, im2, ImgW, ImgH);

Это прекрасно компилируется, но я получаю ошибку ссылки "неразрешенный внешний символ" для:

imShow<unsigned char,char>(unsigned char *,char *,int,int)

Я не понимаю, что я сделал неправильно!

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Вам необходимо определить этот шаблон в заголовочном файле, если ваш компилятор не имеет функции шаблона экспорта (есть только компиляторы, основанные на интерфейсе EDG, чего нет у GCC и MSVC). В качестве альтернативы вы можете явно создать экземпляр шаблона функции в файле .cpp (если вы поместили его определение там):

template void imShow(unsigned char* img1, char* img2, int ImgW, int ImgH);

Но как только вы передадите другую пару типов, которые вы явно не создали, она снова не сможет связать. Таким образом, вам нужно поместить определение шаблона функции в заголовок, чтобы компилятор видел его при вызове функции и создавал копию самой функции.

1 голос
/ 23 апреля 2010

Вы, вероятно, забыли правильно определить функцию вашего шаблона.Где определения?Я не вижу ничего в вашем посте.

...