我有以下代码:
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
}
奇怪的编译错误:
myfile.h:在函数'int double_to_bulk(double,char *,double, int *)':
myfile.h:351:错误:'isnan'没有参数 取决于模板参数,因此'isnan'的声明必须是 可用
myfile.h:351:错误:(如果使用'-fpermissive',G ++会 接受你的代码,但允许使用未声明的名称 不建议使用)
但我真的不想使用-fpermissive
我使用gcc 4.1.2
,相当古老,但与此无关。为什么在模板函数中使用isnan
会出现问题?
答案 0 :(得分:1)
您似乎没有isnan
的可用定义。您是否在源中包含了定义isnan
的相应头文件?这里没有任何东西似乎取决于你的模板参数。
答案 1 :(得分:0)
添加行#include<cmath>
可以解决问题。
如果任何参数确实依赖于模板参数(例如,如果其中一个参数具有模板参数类型),则编译器将仅在您实例化模板时检查是否存在isnan
,这可能会导致无论如何,只是在一个错误,或者如果你从不使用模板,可能根本就没有错误。
不要使用-fpermisive
,它可能只是将错误延迟到链接时间