странная ошибка - PullRequest
       9

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

1 голос
/ 14 декабря 2011

У меня сильная головная боль от простого теста isnan в моем коде. У меня есть трехмерный векторный класс с переменными 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 голос
/ 14 декабря 2011

1) Попробуйте включить <math.h> 2) Напишите свою собственную функцию isnan (x)

bool isnan(x)
{
   if (x==x)
   {
      return false;
   }
   else
   {
      return true;
   }
}

3) Может быть, это глупая проблема с именами? isnanl должно быть определено как isnan?См .: Проверка, является ли double (или число с плавающей запятой) NaN в C ++

0 голосов
/ 20 февраля 2015

Я сталкиваюсь с той же проблемой.isnan () работает в командной строке, но, к сожалению, Eclipse сообщает об этом как об ошибке.Проблема в том, что Eclipse CDT использует компилятор gcc немного по-другому.Если взглянуть немного глубже, то isnan () представляется макросом, который переводится в __isnan () или некоторые другие функции в зависимости от некоторых флагов.Возможно, эти флаги отличаются при компиляции из Eclipse.

Я исправил это с помощью функции

__isnan(double x)

, которую также можно найти в math.h, корректно работает на компиляторе cmdline, а Eclipse - нетпожаловаться на это.

...