我的代码中有一个简单的isnan测试,这让我很头疼。我有一个3d向量类,它包含double类型的变量x、y和z,以及头文件中的以下函数:
#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并不能解决这个问题。有人知道这是怎么回事吗?
发布于 2011-12-14 08:10:44
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++
发布于 2015-02-20 21:30:21
我遇到了同样的问题。isnan()在命令行上工作,但令人恼火的是,Eclipse将其报告为一个错误。这个问题是由于Eclipse CDT对gcc编译器的使用稍有不同造成的。更深入地看,isnan()似乎是一个宏,根据某些标志被转换为__isnan()或其他一些函数。当您从Eclipse编译时,这些标志可能会有所不同。
我通过使用函数修复了它
__isnan(double x)它也可以在math.h上找到,可以在cmdline编译器上正常工作,Eclipse对此没有任何抱怨。
https://stackoverflow.com/questions/8498039
复制相似问题