OpenCV: ошибка C3861: «конечный»: идентификатор не найден

Я использую код с открытым исходным кодом, подготовленный Julien Pilet et al. под заголовком «Создание устойчивости вычитания фона к внезапным изменениям освещения». Я ничего не менял, а просто запустил, выдает следующую ошибку:

error C3861: 'finite':identifier not found

Я проверил, и эта ошибка возникла в файле «imstat.h» в следующих строках:

if (!finite(det) || det<1e-5) {
        sigma_computed=false;
        n=0;
        one_over_sq_det= 1;
        memset(sigma,0,sizeof(sigma));
        sigma[0][0]=1;
        sigma[1][1]=1;
        sigma[2][2]=1;
        two_ln_sq_det = 2;
    } else {
        one_over_sq_det = 1/sqrtf(det);
        assert(finite(one_over_sq_det));
        two_ln_sq_det = 2*log(sqrtf(det));
        sigma_computed=true;
        n = new_n;
    }

Файл "imstat.h" был включен кодом в файл "emvisi2.h". Может ли кто-нибудь помочь мне понять эту ошибку? Кажется, что-то не так в каком-то определении класса, но я не смог его найти. Спасибо.


person E_learner    schedule 23.08.2012    source источник
comment
Вместе с компилятором мы не знаем, что такое finite(), поэтому не можем ответить на него прямо сейчас и требуем дополнительной информации об этой функции.   -  person SingerOfTheFall    schedule 23.08.2012


Ответы (1)


finite() — это устаревшая библиотечная функция BSD, которую вы можете найти в некоторых, но не во всех версиях <cmath>.

Если у вас есть версия <cmath> для C++11 или версия <math.h> для C99, то должен быть доступен эквивалент isfinite(). Это может быть недоступно в более старых версиях стандартной библиотеки.

Microsoft также, кажется, объявляет эквивалентный нестандартный _finite() в <float.h>.

person Mike Seymour    schedule 23.08.2012
comment
Спасибо за ваш ответ. Я использую MS Visual Studio 2010 и изменил его на isfinite() после включения ‹cmath› и ‹math.h›, но он по-прежнему выдает ту же ошибку, говоря isfinite:identifier not found. - person E_learner; 23.08.2012
comment
Похоже, Microsoft может написать это _finite; возможно, это сработает для вас. - person Mike Seymour; 23.08.2012
comment
Я включил ‹float.h› и изменил его на _finite, но на этот раз он выдает ошибку для этой строки: error LNK1120:14 unresolved externals - person E_learner; 23.08.2012
comment
@ederman: Боюсь, я не могу с этим помочь; Я не программирую для Windows. Задайте отдельный вопрос об этом, если вы не можете понять это. - person Mike Seymour; 23.08.2012