2012-08-23 71 views
1

我正在使用由Julien Pilet等人編寫的開源代碼。標題爲「使背景減少突然照明變化」。我沒有任何改變,只是運行它,然後它給了我下面的錯誤:OpenCV:錯誤C3861:'有限':標識符未找到

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」文件中的代碼中。有人能幫我理解這個錯誤嗎?似乎某種類定義中存在某些錯誤,但我找不到它。謝謝。

+1

除了編譯器之外,我們不知道'finite()'是什麼,所以我們現在不能回答它並要求關於該函數的其他信息。 – SingerOfTheFall

+0

嘗試http://msdn.microsoft.com/en-us/library/sb8es7a8.aspx – hmjd

+0

我認爲你應該用['std :: isfinite'](http://en.cppreference.com/w/)替換它cpp/numeric/math/isfinite) – Lol4t0

回答

2

finite()是一個過時的BSD庫函數,您可能會在<cmath>的某些(但不是全部)版本中找到它。

如果您有<cmath>的C++ 11版本或<math.h>的C99版本,則應提供等效的isfinite()。這可能不適用於舊版本的標準庫。

微軟似乎也在<float.h>中聲明瞭一個等效的非標準_finite()函數。

+0

謝謝你的回答。我使用的是MS visual studio 2010,並且在包含之後,我將其更改爲「isfinite()」,但它仍然給出相同的錯誤,並說「isfinite」:標識符未找到。 –

+0

看起來像微軟可能拼寫'_finite';也許這會對你有用。 –

+0

我收錄了並將其更改爲「_finite」,但這一次它給出該行的錯誤說:錯誤LNK1120:14個未解決的外部問題 –

相關問題