isnan奇怪的错误

时间:2011-12-14 00:08:11

标签: eclipse-cdt nan

我在代码中通过简单的isnan测试得到了很多麻烦。我有一个包含变量xyz类型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.hmath.h无法解决问题。有谁知道发生了什么?

2 个答案:

答案 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不会抱怨它。