| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1091 人关注过本帖
标题:想不明白的问题,请大家帮忙看一下。
取消只看楼主 加入收藏
glee_1218
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-15
收藏
 问题点数:0 回复次数:3 
想不明白的问题,请大家帮忙看一下。
随便写着玩的程序。想定义个函数指针数组,根据需要调用不同的函数,vc6编译出错。粗体那行:FUNC2.C(23) : error C2120: 'void' illegal with all types
#include "stdio.h"
#include "string.h"
int a[10]={1,2,3,4,5,6,7,8,9,10};
void * func1(int x)
{
 if((x>0)&&(x<9))
   return &a[x];
 else
   return NULL;
}
void * func2(int x)
{
 if((x>0)&&(x<9))
   return &a[9-x];
 else
   return NULL;
}
void (* signal(int sig,int num))(int)
{
 void (* pfun[2])(int);
 pfun[0]=func1;
 pfun[1]=func2;
 [bo]return (*pfun[sig-1])(num);[/bo]}

void main()
{
 int a,fc;
 int *p=NULL;
 printf("please input a integer0~9:\n");
 scanf("%d",&a);
 if((a<9)&&(a>0))
  {
   printf("please input a function name:1 or 2\n");
   scanf("%d",&fc);
   if((fc==1)||(fc==2))
     p=(int *)signal(fc,a);
   else
     printf("incorrect function!\n");
   if(p!=NULL)
     printf("%d",*p);
   else
     printf("incorrect value!");
  }
 else
   printf("please input a integer 0~9!");
}
搜索更多相关主题的帖子: void include return 
2008-03-15 20:45
glee_1218
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-15
收藏
得分:0 
回复 2# 的帖子
是不是指针数组定义错了?
我都快糊涂了。。。
2008-03-15 20:54
glee_1218
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-15
收藏
得分:0 
原来写的程序,编译,运行都没有问题的,我想改一下,换一种方法实现,结果就。。。
这是昨天写的,和刚才那个功能一样,这个就没有问题,出错的那个改了一下参数,多定义了一个函数指针数组,到底怎么回事,为什么编译出错?
/*本程序的功能是通过输入调用相应的函数,求下标对应的元素值,或者下标模9的元素值*/
#include "stdio.h"
#include "string.h"
/*定义一个外部数组a*/
int a[10]={1,2,3,4,5,6,7,8,9,10};
/*func1的功能是求得a[x]*/
void * func1(int x)
{
 if((x>0)&&(x<9))
   return &a[x];
 else
   return NULL;
}
/*func2的功能是求得a[9-x]*/
void * func2(int x)
{
 if((x>0)&&(x<9))
   return &a[9-x];
 else
   return NULL;
}
/*把函数指针作为参数*/
void (* signal(int sig,void * func(int x)))(int x)
{
 return func(sig);
}

void main()
{
 int a;
 char * s=NULL;
 int * p=NULL;
 printf("please input number 0~9\n");
 scanf("%d",&a);
 printf("please input type:func1,or func2\n");
 scanf("%s",s);
 if(strcmp(s,"func1")==0)
   p=(int *)signal(a,func1);
 else
   if(strcmp(s,"func2")==0)
     p=(int *)signal(a,func2);
   else
     {
      printf("please input correct function name!\n");
      exit(0);
     }
 if(p!=NULL)
   printf("%d",*p);
 else
   {
    printf("incorrect value!");
    exit(0);
   }
}

2008-03-15 20:58
glee_1218
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-15
收藏
得分:0 
谢谢了!改过来了。
两个地方:
第一个:定义指针数组那里改成:void *(* pfun[2])(int);这样才是数组元素是指向返回值是指针的函数指针的数组。。。(真绕,怎么说才好),写成void (* pfun[2])(int);这样是一个函数指针数组,元素指向无返回值的带一个参数的函数。
这是编译错误。
第二个,就像楼上说的,signal是一个库函数,呵呵,我改成signals了。。。
这是链接错误。
不过昨天写的那个就是signal,编译,链接都没有错,难道是返回值,参数和那个库函数都一样,被改写了?搞不明白。。。

不管怎么说谢谢大家!我会常来的!!
2008-03-15 21:39
快速回复:想不明白的问题,请大家帮忙看一下。
数据加载中...
 
   



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

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