Странная ошибка

Я получаю много головной боли с простым 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 не жалуется на это.

Другие вопросы по тегам