2

我正在尝试编译 shogun 工具箱,但我遇到了这个错误

    C:/shogun-3.0.0/shogun-3.0.0/src/shogun/../shogun/mathematics/Math.h: In static
    member function 'static int shogun::CMath::is_finite(double)':
    C:/shogun-3.0.0/shogun-3.0.0/src/shogun/../shogun/mathematics/Math.h:1255:20: er
    ror: 'ifinite' was not declared in this scope
    return ifinite(f);

函数本身看起来像这样。

        inline static int is_finite(double)
        {      
        #if defined(isfinite) && !defined(SUNOS)
        return ifinite(f);
        #else
        return finite(f);
        #endif
        }

我相信这里有类似的描述:http ://www.alecjacobson.com/weblog/?p= 1768,但我不确定,因为我不包括 cmath。知道它可能是什么吗?

4

2 回答 2

2

我刚刚从这里下载了 shogun-3.0.0 ,并且在源代码的任何地方都没有出现字符串“ifinite”。is_finitein的定义Math.h是:

        /// checks whether a float is finite
        inline static int is_finite(double f)
        {
#if defined(isfinite) && !defined(SUNOS)
            return isfinite(f);
#else
            return finite(f);
#endif
        }

如果您在问题中输入的错误和源文本是正确的,那么您的源可能已损坏。您应该下载源代码并重试。

于 2013-11-21T15:20:15.640 回答
2

功能是isfinite,不是ifinite

您不包括<cmath>但根据 Shogun source here,它确实包括两者<cmath>并且<math.h>顺序错误:

#include <shogun/base/SGObject.h>
#include <shogun/lib/common.h>
#include <cmath>                             <<<<<<
#include <shogun/mathematics/Math.h>
#include <shogun/mathematics/lapack.h>
#include <shogun/io/SGIO.h>

#include <stdio.h>
#include <stdlib.h>
#include <math.h>                            <<<<<<

所以你应该使用std::isfinite.

于 2013-11-21T13:32:17.687 回答