标题:求助:不能将参数 1 从“int *”转换为“int (__cdecl *)(void)
只看楼主
phqxjwyf
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-2-21
 问题点数:0 回复次数:3 
求助:不能将参数 1 从“int *”转换为“int (__cdecl *)(void)
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#include <assert.h>
#include <stdlib.h>

int enter(void),delete1(void),review(void),quit(void),menu(void);
int process(int ( *fun)(void));
int *options[4]=
{
    (int *)enter,
    (int *)delete1,
    (int *)review,
    (int *)quit
};
int main(void)
{
    int i;
    i=menu();

    process(options[i]);//options[i])与函数名的值相同,可编译是却告知“不能将参数 1 从“int *”转换为“int (__cdecl *)(void)”
//    printf("%p\n",enter);
    return 0;
}

int menu(void)
{
    char ch;
    do
    {
        printf("1.enter\n");
        printf("2.delete\n");
        printf("3.review\n");
        printf("4.quit\n");
        printf("select a number:");
        ch=getche();
        printf("\n");
    } while (!strchr("1234",ch));

    printf("%x\n",ch);


    return ch-49;//49相当于16进制的31h.返回0,代表options[0]
}

int process(int ( *fun)(void))
{
    (*fun)();
    return 0;
}

int enter()
{
    return 1;
}
int delete1()
{
    return 1;
}
int review()
{
    return 1;
}
int quit()
{
    return 1;
}


请高手帮忙,我用的是VS2005编译器。
搜索更多相关主题的帖子: include process 
2011-05-06 12:08
misswe
Rank: 2
等 级:论坛游民
帖 子:17
专家分:15
注 册:2011-4-30
得分:0 
解释类型不同 肯定是转不了的!
2011-05-06 21:05
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
int (*options[4])(void)=
 {
     enter,
     delete1,
     review,
     quit
 };

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2011-05-06 22:50
phqxjwyf
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-2-21
得分:0 
多谢forever74!!!!豁然开朗!!

[ 本帖最后由 phqxjwyf 于 2011-5-7 11:11 编辑 ]
2011-05-07 11:06



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




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

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