Использование isnan в шаблонной функции

У меня есть следующий код:

  template<int FORMAT>
int double_to_bulk(double value,
char* buf,
double max_num,
int* state = NULL)
{
if (isnan(value))
{
//Something to do
return 1;
}
//Something more to do
}

И странная ошибка компиляции:

myfile.h: в функции int double_to_bulk (double, char *, double,
INT *)»:

myfile.h: 351: ошибка: нет аргументов для «isnan», которые
зависит от параметра шаблона, поэтому объявление ‘isnan’ должно быть
имеется в наличии

myfile.h: 351: ошибка: (если вы используете «-fpermissive», G ++ будет
принять ваш код, но разрешить использование необъявленного имени
устаревшее)

Но я действительно не хочу использовать -fpermissive

я использую gcc 4.1.2, довольно старый, но ничего общего с этим. Почему это проблема для использования isnan в шаблонной функции?

-1

Решение

Похоже, у вас нет доступного определения для isnan, Вы включили в свой источник соответствующий файл заголовка, где isnan определено? Кажется, здесь вообще ничего не зависит от параметра вашего шаблона.

1

Другие решения

Добавление строки #include<cmath> должен решить проблему.

Если какие-либо аргументы зависели от параметра шаблона (например, если один из аргументов имел тип параметра шаблона), компилятор будет проверять только наличие isnan когда вы создаете экземпляр шаблона, который, вероятно, в любом случае вызовет ошибку, чуть позже или, возможно, вообще не будет, если вы никогда не будете использовать шаблон.

Не использовать -fpermisive, это, вероятно, просто задержит ошибку, чтобы связать время

0

По вопросам рекламы [email protected]