我正在尝试编写一个最大化函数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
答案 0 :(得分:3)
你在第53行的第32行,和中声明了函数声明(“prototype”)中的默认参数值。由于我不知道的原因,C ++的众神已经决定不允许这样做:请参阅以下摘录自C ++ 2003标准的8.3.6 / 4:
默认参数不应由后来的声明(甚至不是相同的值)重新定义。
请注意,这是来自现在很老的C ++ 03标准 - 但是您使用的编译器仍处于该模式,或者此行为在C ++ 11中保持不变,或两者都保持不变。
[编辑] 我忘了提到如何解决问题!只需删除除第一个之外的每个声明的默认参数。