非常简单的优化算法产生函数参数错误

时间:2015-07-21 01:01:38

标签: c++ algorithm optimization

我正在尝试编写一个最大化函数f(x)的程序。算法是:

double maxx(double(*f)(const double &), double &a, double &b, const double tol = 1e-5)
{
    static double goldenratio = 0.618034;
    double c = b - goldenratio * (b - a);
    double d = a + goldenratio * (b - a);
    while (abs(c - d) > tol)
    {
        double fc = (*f)(c); double fd = (*f)(d);
        if (fc > fd)
        {
            b = d;
            d = c;
            c = b - goldenratio * (b - a);
        }
        else
        {
            a = c;
            c = d;
            d = a + goldenratio * (b - a);
        }
    }
    return 0.5 * (b + a);
}

我在main()中调用此函数时收到错误。错误消息是:

严重级代码说明项目文件行 错误C2572'maxx':重新定义默认参数:参数1

我在这里做错了什么?我在这里填写完整的代码:https://cloudup.com/cqHB_DKDIAF

1 个答案:

答案 0 :(得分:3)

你在第53行的第32行,中声明了函数声明(“prototype”)中的默认参数值。由于我不知道的原因,C ++的众神已经决定不允许这样做:请参阅以下摘录自C ++ 2003标准的8.3.6 / 4:

  

默认参数不应由后来的声明(甚至不是相同的值)重新定义。

请注意,这是来自现在很老的C ++ 03标准 - 但是您使用的编译器仍处于该模式,或者此行为在C ++ 11中保持不变,或两者都保持不变。

[编辑] 我忘了提到如何解决问题!只需删除除第一个之外的每个声明的默认参数。