当前位置: 代码迷 >> C语言 >> 想不明白的问题,请大家帮忙看一下。
  详细解决方案

想不明白的问题,请大家帮忙看一下。

热度:279   发布时间:2008-03-15 20:45:48.0
想不明白的问题,请大家帮忙看一下。
随便写着玩的程序。想定义个函数指针数组,根据需要调用不同的函数,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  

----------------解决方案--------------------------------------------------------
你的程序想改不容易啊..呵呵...你自己好好改啊..返回指针是null可能引发异常..指向函数的指针..
----------------解决方案--------------------------------------------------------
回复 2# 的帖子
是不是指针数组定义错了?
我都快糊涂了。。。
----------------解决方案--------------------------------------------------------
原来写的程序,编译,运行都没有问题的,我想改一下,换一种方法实现,结果就。。。
这是昨天写的,和刚才那个功能一样,这个就没有问题,出错的那个改了一下参数,多定义了一个函数指针数组,到底怎么回事,为什么编译出错?
/*本程序的功能是通过输入调用相应的函数,求下标对应的元素值,或者下标模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);
   }
}

----------------解决方案--------------------------------------------------------
return (*pfun[sig-1])(num);}
个人感觉这表达式返回的是一个函数返回值,而不是一个指针,另外signal函数是库函数
----------------解决方案--------------------------------------------------------
不好意思..我怀疑编译器不认识...
程序很难理解的..最好不呀袄用啊
#include "stdio.h"
#include "string.h"
int a[10]={1,2,3,4,5,6,7,8,9,10};
int * func1(int x)
    {
    if((x>0)&&(x<9))
      return &a[x];
    else
     return NULL;
    }

int * func2(int x)
    {
    if((x>0)&&(x<9))
     return &a[9-x];
    else
      return NULL;
    }


int* fun0(int num)
    {
   int * (* pfun[2])(int);
    pfun[0]=func1;
    pfun[1]=func2;
    if((*pfun[0])(num))
    return (*pfun[0])(num);
    else
    return (*pfun[1])(num);

    }

void main()
{
    int a,fc;
    int *p=NULL;
    int* (*signal)(int);
    signal=fun0;
    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=(*signal)(a);
      else
        printf("incorrect function!\n");
     if(p!=NULL)
       printf("%d",*p);
      else
       printf("incorrect value!");
      }
    else
       printf("please input a integer 0~9!");
}
----------------解决方案--------------------------------------------------------
lz加油啊..我相信你可以改对的啊.
----------------解决方案--------------------------------------------------------
帮你加油.
----------------解决方案--------------------------------------------------------
谢谢了!改过来了。
两个地方:
第一个:定义指针数组那里改成:void *(* pfun[2])(int);这样才是数组元素是指向返回值是指针的函数指针的数组。。。(真绕,怎么说才好),写成void (* pfun[2])(int);这样是一个函数指针数组,元素指向无返回值的带一个参数的函数。
这是编译错误。
第二个,就像楼上说的,signal是一个库函数,呵呵,我改成signals了。。。
这是链接错误。
不过昨天写的那个就是signal,编译,链接都没有错,难道是返回值,参数和那个库函数都一样,被改写了?搞不明白。。。

不管怎么说谢谢大家!我会常来的!!
----------------解决方案--------------------------------------------------------
LZ加油啊``复杂声明弄得满不错的``
----------------解决方案--------------------------------------------------------
  相关解决方案