Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在模板函数中使用isnan_C++_Templates_Macros_Gcc4 - Fatal编程技术网

C++ 在模板函数中使用isnan

C++ 在模板函数中使用isnan,c++,templates,macros,gcc4,C++,Templates,Macros,Gcc4,我有以下代码: template<int FORMAT> int double_to_bulk(double value, char* buf, double max_num, int* state = NULL) { if (isnan(value)) { //Something to do

我有以下代码:

  template<int FORMAT>
  int double_to_bulk(double value,
                       char* buf,
                       double max_num,
                       int* state = NULL)
  {
     if (isnan(value))
     {
        //Something to do
        return 1;
     }
     //Something more to do
  }
模板
int double_到_bulk(双倍值,
char*buf,
双倍最大值,
int*state=NULL)
{
如果(isnan(值))
{
//有事可做
返回1;
}
//还有别的事要做吗
}
奇怪的编译错误:

h:在函数“int double”到“bulk”(double,char*,double, int*)':

myfile.h:351:错误:“isnan”没有参数 依赖于模板参数,因此必须声明'isnan' 可用

myfile.h:351:error:(如果使用'-fppermissive',G++将 接受您的代码,但允许使用未声明的名称是错误的 不推荐)

但是我真的不想使用
-fpermissive


我使用的是
GCC4.1.2
,非常旧,但与之无关。为什么在模板函数中使用
isnan
会出现问题?

看起来您没有可用的
isnan
定义。您是否在源代码中包含定义了
isnan
的相应头文件?这里似乎没有任何东西依赖于模板参数。

添加行
#include
应该可以解决问题

如果任何参数确实依赖于模板参数(例如,如果其中一个参数具有模板参数类型),则编译器将仅在实例化模板时检查是否存在
isnan
,这可能会在稍后导致错误,或者如果从未使用模板,则可能根本不会导致错误


不要使用
-fpermissive
,这可能只是将错误延迟到链接时间

是,将其移出到另一个函数表明未定义它。我只是被编译器的这种信息弄糊涂了。在C99中,它是以宏的形式存在的。是的,它只是没有定义。我只是被这种奇怪的信息弄糊涂了。