Странная ошибка
Я получаю много головной боли с простым isnan
проверить в моем коде. У меня есть 3d векторный класс с переменными x
,y
,z
типа double
и следующая функция в заголовочном файле:
#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
Я строю в среде Linux GCC на Eclipse CDT и получаю следующую ошибку:
Function '__isnanl' could not be resolved
так же как
Function '__isnanf' could not be resolved
для всех случаев isnan
, С помощью std::isnan
и в том числе float.h
а также math.h
не решай это. Кто-нибудь знает, что происходит?
2 ответа
1) Попробуйте включить <math.h>
2) Напишите свою собственную функцию isnan(x)
bool isnan(x)
{
if (x==x)
{
return false;
}
else
{
return true;
}
}
3) Это может быть глупая проблема с именами?isnanl
должно быть определено как isnan
? Смотрите: Проверка, является ли double (или float) NaN в C++
Я сталкиваюсь с той же проблемой. isnan() работает в командной строке, но, к сожалению, Eclipse сообщает об этом как об ошибке. Проблема в том, что Eclipse CDT использует компилятор gcc немного по-другому. Если взглянуть немного глубже, то isnan () представляется макросом, который переводится в __isnan() или некоторые другие функции в зависимости от некоторых флагов. Возможно, эти флаги отличаются при компиляции из Eclipse.
Я исправил это с помощью функции
__isnan(double x)
который также можно найти на math.h, корректно работает на компиляторе cmdline и Eclipse не жалуется на это.