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

标签 c++ templates gcc

我正在处理一些遗留代码,并试图让它在 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/

相关文章:

c++ - 为什么这个构造函数要这样写?

c++ - 使用 C++ 将对象读写到二进制文件中?

c++ - 哪些 C++ 标准库头调用了 GCC 的 -pthread 选项要求?

c++ - 简单的 getter/accessor 防止矢量化 - gcc 错误?

templates - 返回不同输入范围时函数返回类型不匹配的现象

gcc - bash : ./mips-linux-gnu-gcc: 无法执行二进制文件错误

C++ 类(带集合)存储通用模板类...编译问题

c++ - 将Qt4移植到Qt5,为OpenGL调用获取未解析的外部符号

c++ - 创建一个类模板,该模板可以将由其自身创建的类作为参数

c++ - 尝试使用 sfinae 重载时不必要的 bool 重载替换