我在代码中通过简单的isnan
测试得到了很多麻烦。我有一个包含变量x
,y
,z
类型double
的3d矢量类,以及头文件中的以下函数:
#ifdef WIN32
bool IsValid() const {return !_isnan(x) && _finite(x) && !_isnan(y) && _finite(y) && !_isnan(z) && _finite(z);} //is a valid vector? (funky windows _ versions...)
#else
bool IsValid() const {return !isnan(x) && finite(x) && !isnan(y) && finite(y) && !isnan(z) && finite(z);} //is a valid vector?
#endif
我在Eclipse CDT上的Linux GCC环境中构建并收到以下错误:
Function '__isnanl' could not be resolved
以及
Function '__isnanf' could not be resolved
适用于isnan
的所有实例。使用std::isnan
并包括float.h
和math.h
无法解决问题。有谁知道发生了什么?
答案 0 :(得分:1)
1)尝试加入<math.h>
2)编写自己的isnan(x)函数
bool isnan(x)
{
if (x==x)
{
return false;
}
else
{
return true;
}
}
3)这可能是一个愚蠢的命名问题吗?isnanl
应该定义为isnan
?
请参阅:Checking if a double (or float) is NaN in C++
答案 1 :(得分:0)
我遇到了同样的问题。 isnan()在命令行上工作,但令人讨厌的是,Eclipse将其报告为错误。问题是由于Eclipse CDT使用gcc编译器的方式略有不同。看得更深一点,isnan()似乎是一个宏,根据一些标志转换为__isnan()或其他一些函数。从Eclipse编译时,这些标志可能不同。
我使用函数
修复了它__isnan(double x)
也可以在math.h上找到,在cmdline编译器上正常工作,Eclipse不会抱怨它。