如何将模板参数添加到全局函数?

时间:2010-11-15 21:50:23

标签: c++ templates gcc

我正在使用一些遗留代码,并试图让它在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'文件中

2 个答案:

答案 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;确切的错误信息。