函数模板重载:链接错误

时间:2010-04-23 14:28:53

标签: c++ templates overloading function-templates

我正在尝试按如下方式重载“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 个答案:

答案 0 :(得分:2)

如果您的编译器没有“导出”模板功能(只有基于EDG前端的编译器,GCC和MSVC没有),您需要在头文件中定义该模板。您也可以在.cpp文件中显式实例化函数模板(如果您在其中放置了它的定义):

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

但是一旦你传递了另一对类型,你没有明确地实例化它,它再次无法链接。因此,您需要将函数模板的定义放入标头中,以便编译器在调用函数时看到它,并实例化函数本身的副本。

答案 1 :(得分:1)

您可能忘记正确定义您的模板功能。定义在哪里?我的帖子中没有看到任何内容。