【问题标题】:OpenCV: error C3861: 'finite':identifier not foundOpenCV:错误 C3861:“有限”:找不到标识符
【发布时间】:2012-08-18 23:41:21
【问题描述】:

我正在使用 Julien Pilet 等人编写的开源代码。在“使背景减法对突然的照明变化具有鲁棒性”的标题下。我没有改变任何东西,只是运行它,然后它给了我以下错误:

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;
    }

“emvisi2.h”文件中的代码包含“imstat.h”文件。有人可以帮我理解这个错误吗?似乎某种类定义中有问题,但我找不到。谢谢你。

【问题讨论】:

标签: c++ opencv error-handling background identifier


【解决方案1】:

finite() 是一个过时的 BSD 库函数,您可能会在 &lt;cmath&gt; 的某些(但不是全部)版本中找到它。

如果您有 &lt;cmath&gt; 的 C++11 版本或 &lt;math.h&gt; 的 C99 版本,则应该可以使用等效的 isfinite()。这在旧版本的标准库中可能不可用。

微软似乎也在&lt;float.h&gt; 中声明了一个等效的非标准_finite() 函数。

【讨论】:

  • 感谢您的回答。我正在使用 MS Visual Studio 2010,在包含 后将其更改为“isfinite()”,但它仍然给出相同的错误,说“isfinite”:找不到标识符。
  • 看起来微软可能会拼写它_finite;也许这对你有用。
  • 我包含了 并将其更改为“_finite”,但这次它给出了该行的错误:error LNK1120:14 unresolved externals
  • @ederman:恐怕我无能为力;我不会为 Windows 编程。如果您无法弄清楚,请提出一个单独的问题。
猜你喜欢
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
相关资源
最近更新 更多