我正在使用一些遗留代码,并试图让它在Linux中编译。它最初是在visual studio中构建的,其编译器不符合标准。无论如何,现在我正在修复它的代码,我遇到了一个全局声明的模板化函数。我收到错误:
/home/blah/blah;/blah.h:78: 错误:没有参数 'Clip'依赖于模板 参数,所以'Clip'的声明 必须可用
通过执行myClass :: 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'文件中
答案 0 :(得分:0)
在导致此错误的模板定义之前的某处声明Clip
。如果Clip
本身不是模板,那么普通声明就可以了。如果Clip
是一个功能模板而您找到了Clip
的定义,则通常只需复制该定义的开头并将{...}
替换为;
即可获得有效的声明。
编辑:好的,所以你找到了Clip
的定义,让我们在clip.h中说。你的编译错误在problem.h中。
最好的办法是将#include <clip.h>
添加到problem.h的顶部附近。确保两者都有防范多个#include。
但如果引入循环标头依赖关系,则可能无效。如果添加#include
导致不同的错误,您可以尝试在给出错误的定义之前将Clip
的声明(而不是定义)放在problem.h中。这将是您使用{...}
复制,粘贴和替换;
的部分。
template<class T> inline T Clip( T x, T bot, T top );
答案 1 :(得分:0)
您可以使用范围重新清除操作符来解决此问题。像这样:
::Clip<params>(...);
但很难确切地知道你遇到了什么问题。请发布代码&amp;确切的错误信息。