我正在处理一些遗留代码,并试图让它在 Linux 中编译。它最初是在 visual studio 中构建的,其编译器不符合标准。无论如何,现在我正在研究修复它的代码,我遇到了一个全局声明的模板函数。我收到错误:
/home/blah/blah;/blah.h:78: error: there are no arguments to ‘Clip’ that depend on a template parameter, so a declaration of ‘Clip’ must be available
之前,当它们在特定范围内时,我已经能够通过执行 myClass::Clip 修复同样的错误。但是,由于它没有范围,我该如何解决这个问题?
更新:这里是 Clip 函数的声明:
template<class T> inline T Clip( T x, T bot, T top )
{ return(( x>=bot && x<=top ) ? x : (( x<bot ) ? bot : top )); }
对 Clip 的调用:
src_row = Clip( dst_row + h, 0, SR );
//dst_row + h, 0, SR are all int's... does that help?
//btw, love the quick responses, thanks.
调用和声明在不同的“.h”文件中
最佳答案
声明Clip
导致此错误的模板定义之前的某处。如果Clip
本身不是模板,一个普通的声明就可以了。如果Clip
是一个函数模板,你可以找到 Clip
的定义,您通常可以只复制该定义的开头并替换 {...}
用;
获得有效的声明。
编辑:好的,您已经找到了 Clip
的定义,假设在 clip.h 中。而你的编译错误在 problem.h 中。
最好的办法可能是添加 #include <clip.h>
接近 problem.h 的顶部。确保两者都有防止多个#includes 的措施。
但是如果它引入了循环头依赖,那可能就不起作用了。如果添加 #include
导致不同的错误,您可以尝试只放置 Clip
的声明(而不是定义)在 problem.h 中给出错误的定义之前。这将是您只需复制、粘贴和替换 {...}
的部分与 ;
.
template<class T> inline T Clip( T x, T bot, T top );
关于c++ - 如何将模板参数添加到全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189156/