标题:函数嵌套定义的问题
取消只看楼主
好好的A
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-29
结帖率:0
已结贴  问题点数:20 回复次数:4 
函数嵌套定义的问题
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
calculation.cpp
calculation.cpp(7) : error C2084: function 'double __cdecl newtow_iteration(double,double,double (__cdecl *)(double),double (__cdecl *)(double))' already has a body
calculation.cpp(43) : error C2084: function 'double __cdecl simple_itertion(double,double,double (__cdecl *)(double))' already has a body
执行 cl.exe 时出错.

test.exe - 1 error(s), 0 warning(s)
这种错误一般怎么解决
搜索更多相关主题的帖子: function already warning double 
2015-12-29 15:20
好好的A
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-29
得分:0 
回复 2楼 wp231957
怎么进行修改呢


[此贴子已经被作者于2015-12-29 15:37编辑过]

2015-12-29 15:26
好好的A
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-29
得分:0 
回复 4楼 TonyDeng
知道啊!但是不知如何修改
2015-12-29 15:45
好好的A
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-29
得分:0 
头文件calculation.h
double newtow_iteration(double x,double eps,double (*f)(double),double (*df)(double)); //牛顿迭代法
double simple_itertion(double x,double eps,double (*f)(double));                 //简单迭代法
double BXdoublenode_itertion(double a,double b,double eps,double (*f)(double)); //变形双点弦截法,a,b为左右区间;

calculation.cpp文件   
# include<stdio.h>
# include<calculation.h>
# include<math.h>

double newtow_iteration(double x,double eps,double (*f)(double),double (*df)(double)) //牛顿迭代法
{
    long max=1000;              //迭代初值x,精度eps ,f原函数,df导函数
    int k=0;       //k值记录迭代次数
    double x1,x2,fx1,dfx1,d=1.0;
    x2=x; //使x2获得迭代初值
    while((d>eps)&&(k<max))
    {
        
        x1=x2;
        fx1=(*f)(x1);
        dfx1=(*df)(x1);
        if(dfx1<1e-10)
        {
            printf("F(X)的导数为0:\n");
            return 0;
        }
        else
        {
          x2=x1-fx1/dfx1;
          d=fabs(x2-x1);
          k++;
        }
        


    }
    if(k>max)
    {
        printf("迭代次数超过最大迭代次数,可能不收敛:\n");
        return 0;
    }
    else
        return x1;

}
double simple_itertion(double x,double eps,double (*f)(double)) //简单迭代法
{
    long max=1000;              //迭代初值x,精度eps ,f原函数
    int k=0;                     //k值记录迭代次数
    double x1,x2,d=1.0;
    x2=x;                       //使x2获得迭代初值
    while((d>eps)&&(k<max))
    {
        
        x1=x2;
        x2=f(x1);
        d=fabs(x2-x1);
        k++;
        
    }
    if(k>max)
    {
        printf("迭代次数超过最大迭代次数,可能不收敛:\n");
        return 0;
    }
    else
        return x1;

}
double BXdoublenode_itertion(double a,double b,double eps,double (*f)(double)) //变形双点弦截法,a,b为左右区间
{
    long i,maxi=2;              //迭代初值x,精度eps ,f原函数
    double epsilon,x0,x1,x,fx0,fx1;
    x0=a;                         //使得a,b获得迭代初值
    x1=b;
    fx0=f(x0);
    fx1=f(x1);
    for(i=0;i<maxi;i++)
    {
        x=x1-fx1*(x1-x0)/(fx1-fx0);
        x0=x1;
        fx0=fx1;
        x1=x;
        fx1=f(x1);
        if(fx1==0)
            break;
        if(fabs(x1-x0)<=epsilon)
            break;
    }
    if(i>maxi)
    {
        printf("迭代次数超过最大迭代次数,可能不收敛:\n");
        return 0;
    }
    else
        return x1;
   
}


test 文件
# include<stdio.h>
# include"calculation.h"

# include<windows.h>
int main()
{
    double eps=1e-3;
    double x,a,b;
    char t;
    double fun(double),dfun(double),fun1(double),fun2(double);
    printf("请输入A,B,C选择计算方法:\nA:牛顿迭代法,B:简单迭代法,C:变形双点弦截法:\n");
    scanf("%c",t);                        //用菜单实现对不同计算方法的选择
    switch(t)
    {
    case 'A':
        printf("请输入迭代初值a:\n");
        scanf("%lf",&a);
        x=a;
        x=newtow_iteration(a,eps,fun,dfun);// 调用牛顿迭代法函数
        printf("方程f(x)=0的根是:\n%f\n",x);
        break;
    case 'B':
        printf("请输入迭代初值a:\n");
        scanf("%lf",&a);
        x=a;
        x=simple_itertion(a,eps,fun1);       //调用简单迭代法函数
        printf("方程f(x)=0的根是:\n%f\n",x);
        break;
    /*case 'C':
        printf("请数入迭代初值a,b:");
        scanf("%lf,%lf",&a,&b);
        x=BXdoublenode_itertion(a,b,eps,fun2);
        printf("方程f(x)=0的根是:\n%f\n",x);
        break;*/
    default:printf("输入的数据错误!");

    }
    system("pause"); /*在关闭此软件,直接点击DEBUG 运行时,
                     数入数据以后会出现闪退的情况,百度了一下才知道加上这一句可以解决这个问题*/

    return 0;

}
double fun(double x)
{
   
    return x*x*x*x*x+5*x-41;//牛顿迭代法的原函数f(x)
   
}
double dfun(double x)
{
   
    return 5*x*x*x*x+5; //牛顿迭代法的导函数df(x)

}
double fun1(double x)   //简单迭代法的原函数
{
    return 1/(x*x*x*x)+3;
}
double fun2(double x)
{
    return 2*x*x*x*x*x-3*x*x-7;//变形双点弦截法的原函数
}
2015-12-29 15:58
好好的A
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-29
得分:0 
回复 8楼 wp231957
那该如何进行改正呢?
2015-12-29 16:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460650-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.976827 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved