如何修复我的代码?

时间:2015-12-02 18:40:40

标签: c cos

具有给定精度的cos(x)的泰勒级数展开

EPS 递归方法

  

[错误]重载函数没有上下文类型信息

如何解决此错误?

Photo1

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

double cos(double x, double eps, double s=0,double n=0,double a=0) {
    if (abs(n)<1){
    cos=cos(x, eps,1,1,1);
}
else {
    a = -a*x*x / ((2*n-1) * (2*n));
    if (abs(a)<=eps) {
        cos=s;
    }
    else{
        cos=cos(x, eps, s+a, a,n+1);
    }
  }
} 
int main () {
    double x;
    scanf("%f", &x);
    cos(x, 0.000000000000001);
}

2 个答案:

答案 0 :(得分:3)

你包含了math.h,它有一个名为cos的函数,它的工作方式略有不同。

您已经重载了该名称(例如,使用名称cos编写了另一个函数),但没有给编译器任何方法来推断出要调用哪个版本的cos

通过将您的函数命名为不同且独特的函数来解决此问题。

这是我尝试修复的方法:

double TaylorCOS(double x, double eps, double s=0,double n=0,double a=0)
{
    if (abs(n)<1)
    {
        return TaylorCOS(x, eps,1,1,1);
    }

    a = -a*x*x / ((2*n-1) * (2*n));
    if (abs(a)<=eps)
    {
        return s;
    }

    return TaylorCOS(x, eps, s+a, a,n+1);
} 

答案 1 :(得分:0)

您不能像在

中那样分配功能标识符
cos=s;
cos=cos(x, eps, s+a, a,n+1);

既不在C中,也不在C ++中。这个程序无法修复。