C++ 未定义的“无效”引用;功能“;C++;

C++ 未定义的“无效”引用;功能“;C++;,c++,reference,header,C++,Reference,Header,我得到了以下错误: features.cpp:(.text+0x4f6): undefined reference to `void Convolve<float>(CImageOf<float>, CImageOf<float>&, CImageOf<float>)' 我实际上找不到上述错误的任何参考如果将函数模板放入.cpp文件并在不同的翻译单元中使用,则需要显式实例化该模板,例如: template void Convolve<

我得到了以下错误:

features.cpp:(.text+0x4f6): undefined reference to `void Convolve<float>(CImageOf<float>, CImageOf<float>&, CImageOf<float>)'

我实际上找不到上述错误的任何参考

如果将函数模板放入.cpp文件并在不同的翻译单元中使用,则需要显式实例化该模板,例如:

template
void Convolve<float>(
   CImageOf<float> src,
   CImageOf<float>& dst,
   CFloatImage kernel);
模板
无效卷积(
中国钢铁工业股份有限公司,
CImageOf&dst,
CFloatImage内核);

基本上,编译器只有在看到模板的定义后才能实例化模板。如果希望自动实例化模板,则需要在标题中定义它。

如果将函数模板放入.cpp文件并在其他翻译单元中使用,则需要显式实例化模板,例如:

template
void Convolve<float>(
   CImageOf<float> src,
   CImageOf<float>& dst,
   CFloatImage kernel);
模板
无效卷积(
中国钢铁工业股份有限公司,
CImageOf&dst,
CFloatImage内核);
基本上,编译器只有在看到模板的定义后才能实例化模板。如果希望自动实例化模板,则需要在标题中定义它。

正如OP中的一个示例所示,问题可能出在没有正确链接的生成文件中

在.h文件中没有定义,只有一个模板声明(正如一些人所建议的)。我认为OP混淆了术语

然而,在.cpp文件中有一个模板的定义以及一个(非模板)函数定义,该函数定义实例化了
convalve
(和其他函数)

因此,重复一下:代码是正确的,但构建例程不是。

在一个带有OP的示例中,问题可能出在一个没有正确链接的Makefile中

在.h文件中没有定义,只有一个模板声明(正如一些人所建议的)。我认为OP混淆了术语

然而,在.cpp文件中有一个模板的定义以及一个(非模板)函数定义,该函数定义实例化了
convalve
(和其他函数)


所以重复一下:代码是正确的,但构建例程不是。

CFloatImage内核!=CImageOfLooks就像您放在头模板函数声明中的一样,而不是定义。其中定义了
Convolve
body?而
CFloatImage
只是
typedef
对于
CImageOf
,对吗?CFloatImage内核!=CImageOfLooks就像您放在头模板函数声明中的一样,而不是定义。其中定义了
Convolve
body?而
CFloatImage
只是
typedef
对于
CImageOf
,对吗?我没有将模板放在.cpp文件中。我在标题中定义了上述内容。在本例中,您使用的模板是在其他地方定义的,而不是实例化的。编译器显然认为您正确地调用了在某处声明但未定义的函数模板。构建可执行文件时是否包含所有必需的库?我没有将模板放在.cpp文件中。我在标题中定义了上述内容。在本例中,您使用的模板是在其他地方定义的,而不是实例化的。编译器显然认为您正确地调用了在某处声明但未定义的函数模板。在构建可执行文件时,是否包含所有必需的库?
template
void Convolve<float>(
   CImageOf<float> src,
   CImageOf<float>& dst,
   CFloatImage kernel);