鱼C论坛

 找回密码
 立即注册
查看: 3666|回复: 22

关函数指针,.....运行时报错了,咋整??

[复制链接]
发表于 2014-4-23 22:45:50 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 欣欣celin 于 2014-4-25 22:00 编辑

/******
设一个函数PROCESS,在调用它的时候,每次实现不同的功能
输入A和B,第一次调用PROCESS时找出大的,
第二次找出小的,第三次求和
********/
#include <stdio.h>
void main()
{
    int max(int, int);
    int min(int, int);
    int add(int, int);

    void process(int x, int y, int(*fun)());

    int a, b;
    printf("enter a and b: ");
    scanf("%d %d", &a, &b);

    printf("max = ");
    process(a, b, max);

    printf("min = ");
    process(a, b, min);

    printf("sum = ");
    process(a, b, add);
}
int max(int x, int y)
{
    int z;

    if(x > y)
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return z;
}
int min(int x, int y)
{
    int n = x;
    if( x>y )
    {
        n = y;
    }
    return n;
}
int add(int x, int y)
{
    int sum;
    sum = x + y;
    return sum;
}

以上程式不知咋嘀,编译没错,运行报错如下,咋整??
各路大神请赐教,十分感谢{:7_154:}
--------------------Configuration: process - Win32 Debug--------------------
Linking...
process.obj : error LNK2001: unresolved external symbol _process
Debug/process.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

process.exe - 1 error(s), 0 warning(s)


最佳答案

查看完整内容

有几个错误 给你修改了一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-23 22:45:51 | 显示全部楼层
有几个错误 给你修改了一下
#include <stdio.h>




int  main()
{
        int Max(int,int);//声明计算函数的形参类型
        int Min(int,int);//声明计算函数的形参类型
        int Add(int,int);//声明计算函数的形参类型
        void process( int x, int y, int(fun)(int,int));//声明过程函数的形参类型

        int a, b;
        printf("enter a and b: ");
        scanf("%d %d", &a, &b);//接收输入到变量a b

        printf("max = ");
        process(a, b, Max);//传递输入的参数a,b,和Max函数地址(函数名就是函数地址),注意你原来的max是小写的和系统本身的冲突了

        printf("min = ");
        process(a, b, Min);

        printf("sum = ");
        process(a, b, Add);
        system("pause");
        return 0;
}
int Max(int x, int y)
{
        int z;
        if(x > y)
        {
                z = x;
        }
        else
        {
                z = y;
        }
        return z;
}
int Min(int x, int y)
{
        int n = x;
        if( x>y )
        {
                n = y;
        }else
        {
                n=x;
        }
        return n;
}
int Add(int x, int y)
{
        int sum;
        sum = x + y;
        return sum;
}
void process(int x, int y, int(fun)(int,int))
{
        int Ret;
        Ret = fun(x,y);//取出函数地址和函数参数并计算,结果保存到Ret
        printf("%d\n", Ret);//打印结果
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-24 11:36:13 | 显示全部楼层
学习了,写的真好!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-24 12:01:30 | 显示全部楼层
/******
 设一个函数PROCESS,在调用它的时候,每次实现不同的功能
 输入A和B,第一次调用PROCESS时找出大的,
 第二次找出小的,第三次求和
 ********/
 #include <stdio.h>
 void main()
 {
     int max(int, int);
     int min(int, int);
     int add(int, int);
 
    void process(int x, int y, int(*fun)());
 
    int a, b;
     printf("enter a and b: ");
     scanf("%d %d", &a, &b);
 
    printf("max = ");
     process(a, b, max);
 
    printf("min = ");
     process(a, b, min);
 
    printf("sum = ");
     process(a, b, add);
 }
 int max(int x, int y)
 {
     int z;
 
    if(x > y)
     {
         z = x;
     }
     else
     {
         z = y;
     }
     return z;
 }
 int min(int x, int y)
 {
     int n = x;
     if( x>y )
     {
         n = y;
     }
     return n;
 }
 int add(int x, int y)
 {
     int sum;
     sum = x + y;
     return sum;
 }

 //加上这个行数定义
 void process(int x, int y, int(*fun)())
 {
         printf("%d\n",((int(*)(int,int))fun)(x,y));
 }
 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-25 16:11:31 | 显示全部楼层
你的process函数呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-25 16:53:34 | 显示全部楼层
你都要return,怎么能用void main呢  要用int main!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-25 22:09:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-25 22:11:55 | 显示全部楼层
qq小小七 发表于 2014-4-25 16:11
你的process函数呢?

在没看到以上大神们的指点之前,偶还不会写PROCESS的内容{:7_181:}
只是总觉得少了点什么{:7_166:},所以发贴求救咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-25 22:16:21 | 显示全部楼层

感谢大神指点,终于明白了,{:7_149:}
不过,很抱歉,事关在您出手之前,有machimilk大神已提供了正解,道义上得优先最佳TA的{:7_174:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-25 22:27:42 | 显示全部楼层

感谢大神指点,终于明白了,{:7_149:}不过,很抱歉,在您出手之前,有machimilk大神已提供了正解,
道义上得优最佳TA的{:7_174:}偶知道您不会介意的呵


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-25 22:34:41 | 显示全部楼层
machimilk 发表于 2014-4-23 22:45
有几个错误 给你修改了一下

感谢大神指点,又学习了{:7_172:}
不过,以下有异意请看“//....”
int Min(int x, int y)
{
        int n = x;      //初始赋值,n=x,假设x最小,
        if( x>y )
        {
                n = y;
        }else        //整个else省略也可以正确运行哦
        {
                n=x;
        }
        return n;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-25 23:08:10 | 显示全部楼层
本帖最后由 machimilk 于 2014-4-25 23:10 编辑
欣欣celin 发表于 2014-4-25 22:34
感谢大神指点,又学习了
不过,以下有异意请看“//....”
int Min(int x, int y)


其实我们这么写都有bug,试想输入2个一样的值,会返回什么,当然我们暂时不考虑2个一样的值,你初始的n等于x 如果y比x小就返回y这样可以省略x的,你注释的else是可以省略的,如果你还想更省也可以这样写
int Max(int x, int y)
{
        return x>y?x:y;
}
int Min(int x, int y)
{
        return x<y?x:y;
}
void main()这样写在vc windows下没问题,但是在其他操作系统下面就会产生错误,为了保持良好的习惯还是用 int main吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-26 18:37:17 | 显示全部楼层
machimilk 发表于 2014-4-25 23:08
其实我们这么写都有bug,试想输入2个一样的值,会返回什么,当然我们暂时不考虑2个一样的值,你初始的n ...

原来如此,学问真是挖出来的呀,谢谢哦{:7_148:}:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-28 16:04:59 | 显示全部楼层
C++数组 学号 成绩{{“01”,81},{“02”,65},{“03”,79},{“04”,65}},怎么 排列啊?按升幂降幂都行,学号 也一定跟着出来, 我自己只能实现  成绩 排序, 实现不了 字符型数组学号的排列, :sweat:  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-28 23:06:24 | 显示全部楼层
云计算 发表于 2014-4-28 16:04
C++数组 学号 成绩{{“01”,81},{“02”,65},{“03”,79},{“04”,65}},怎么 排列啊?按升幂降幂都 ...

哥们,偶还很菜,刚学C,还没学过C++和其它语言,这个问题我去帮你悬赏,找救兵吧,{:7_168:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-28 23:12:37 | 显示全部楼层
欣欣celin 发表于 2014-4-28 23:06
哥们,偶还很菜,刚学C,还没学过C++和其它语言,这个问题我去帮你悬赏,找救兵吧,

已悬赏如下,过两天去看看是否有解答吧{:7_168:}
http://bbs.fishc.com/forum.php?m ... id=46483&extra=  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-28 23:57:28 | 显示全部楼层
你只是没有把自己定义的函数声明,所以main不认识,你只要把自己定义的函数放到main前面就不会出错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-29 21:50:45 | 显示全部楼层
欣欣celin 发表于 2014-4-28 23:12
已悬赏如下,过两天去看看是否有解答吧
http://bbs.fishc.com/forum.php?mod=viewthread&tid=4 ...

兄弟我级别低 无权限访问啊  我Q 767921536
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-29 22:00:09 | 显示全部楼层
云计算 发表于 2014-4-29 21:50
兄弟我级别低 无权限访问啊  我Q 767921536

哥们,偶不用Q好久了,自从被盗后,就没再用了,

要不你试试这么干,
http://fishc.com/dvd/vip.html

要不,有答案之后再转贴到这,给你看,好不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-1 14:22:51 | 显示全部楼层
欣欣celin 发表于 2014-4-29 22:00
哥们,偶不用Q好久了,自从被盗后,就没再用了,

要不你试试这么干,

我论坛也加不了你好友  要不你加下我~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-30 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表