鱼C论坛

 找回密码
 立即注册
查看: 4814|回复: 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)


最佳答案

查看完整内容

有几个错误 给你修改了一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. #include <stdio.h>




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

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

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

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

  15.         printf("sum = ");
  16.         process(a, b, Add);
  17.         system("pause");
  18.         return 0;
  19. }
  20. int Max(int x, int y)
  21. {
  22.         int z;
  23.         if(x > y)
  24.         {
  25.                 z = x;
  26.         }
  27.         else
  28.         {
  29.                 z = y;
  30.         }
  31.         return z;
  32. }
  33. int Min(int x, int y)
  34. {
  35.         int n = x;
  36.         if( x>y )
  37.         {
  38.                 n = y;
  39.         }else
  40.         {
  41.                 n=x;
  42.         }
  43.         return n;
  44. }
  45. int Add(int x, int y)
  46. {
  47.         int sum;
  48.         sum = x + y;
  49.         return sum;
  50. }
  51. void process(int x, int y, int(fun)(int,int))
  52. {
  53.         int Ret;
  54.         Ret = fun(x,y);//取出函数地址和函数参数并计算,结果保存到Ret
  55.         printf("%d\n", Ret);//打印结果
  56. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-24 11:36:13 | 显示全部楼层
学习了,写的真好!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-24 12:01:30 | 显示全部楼层
  1. /******
  2. 设一个函数PROCESS,在调用它的时候,每次实现不同的功能
  3. 输入A和B,第一次调用PROCESS时找出大的,
  4. 第二次找出小的,第三次求和
  5. ********/
  6. #include <stdio.h>
  7. void main()
  8. {
  9.      int max(int, int);
  10.      int min(int, int);
  11.      int add(int, int);

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

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

  16.     printf("max = ");
  17.      process(a, b, max);

  18.     printf("min = ");
  19.      process(a, b, min);

  20.     printf("sum = ");
  21.      process(a, b, add);
  22. }
  23. int max(int x, int y)
  24. {
  25.      int z;

  26.     if(x > y)
  27.      {
  28.          z = x;
  29.      }
  30.      else
  31.      {
  32.          z = y;
  33.      }
  34.      return z;
  35. }
  36. int min(int x, int y)
  37. {
  38.      int n = x;
  39.      if( x>y )
  40.      {
  41.          n = y;
  42.      }
  43.      return n;
  44. }
  45. int add(int x, int y)
  46. {
  47.      int sum;
  48.      sum = x + y;
  49.      return sum;
  50. }

  51. //加上这个行数定义
  52. void process(int x, int y, int(*fun)())
  53. {
  54.          printf("%d\n",((int(*)(int,int))fun)(x,y));
  55. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-25 16:11:31 | 显示全部楼层
你的process函数呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-25 16:53:34 | 显示全部楼层
你都要return,怎么能用void main呢  要用int main!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-25 22:09:36 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

在没看到以上大神们的指点之前,偶还不会写PROCESS的内容{:7_181:}
只是总觉得少了点什么{:7_166:},所以发贴求救咯
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

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


小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://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是可以省略的,如果你还想更省也可以这样写

  1. int Max(int x, int y)
  2. {
  3.         return x>y?x:y;
  4. }
  5. int Min(int x, int y)
  6. {
  7.         return x<y?x:y;
  8. }
复制代码
void main()这样写在vc windows下没问题,但是在其他操作系统下面就会产生错误,为了保持良好的习惯还是用 int main吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

原来如此,学问真是挖出来的呀,谢谢哦{:7_148:}:handshake
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-28 16:04:59 | 显示全部楼层
C++数组 学号 成绩{{“01”,81},{“02”,65},{“03”,79},{“04”,65}},怎么 排列啊?按升幂降幂都行,学号 也一定跟着出来, 我自己只能实现  成绩 排序, 实现不了 字符型数组学号的排列, :sweat:  
小甲鱼最新课程 -> https://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:}
小甲鱼最新课程 -> https://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=  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-28 23:57:28 | 显示全部楼层
你只是没有把自己定义的函数声明,所以main不认识,你只要把自己定义的函数放到main前面就不会出错了
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

要不,有答案之后再转贴到这,给你看,好不?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

要不你试试这么干,

我论坛也加不了你好友  要不你加下我~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-12 20:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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