无法从“void (__cdecl *)(int)”转换为“void (__cdecl *)(void)” 1> 匹配目标的范围内没有该名称函数

#include<iostream>usingnamespacestd;voidf1(int);voidf2(int);voidf3(int);intmain(){voi... #include <iostream>
using namespace std;
void f1(int );
void f2(int );
void f3(int );
int main()
{
void (*f[3])()={f1,f2,f3};
int flag;
cout<<"调用函数输入1、2、3,结束输入0."<<endl;
cin>>flag;
while(flag)
{
if(flag==1||flag==2||flag==3)
{
f[flag-1](flag);
cout<<"请输入1、2、3或者0结束程序!"<<endl;
}
else
{
cout<<"请输入一个合法数1、2、3或者输入0结束程序!"<<endl;
cin>>flag;
}
}
cout<<"程序结束!"<<endl;
return 0;
}
void f1(int n)
{
cout<<"函数f"<<n<<":调用第"<<n<<"个函数"<<endl;
}
void f2(int n)
{
cout<<"函数f"<<n<<":调用第"<<n<<"个函数"<<endl;
}
void f3(int n)
{
cout<<"函数f"<<n<<":调用第"<<n<<"个函数"<<endl;
}
无法从“void (__cdecl *)(int)”转换为“void (__cdecl *)(void)”
1> 在匹配目标类型的范围内没有具有该名称的函数
用于调用的参数太多

主函数里的第一个函数void (*f[3])()={f1,f2,f3}和这个函数f[flag-1](flag);哪儿错了啊?
展开
 我来答
伏从灵000
2015-05-20 · TA获得超过234个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:175万
展开全部
a) f1, f2, f3 是函数名, 参照你函数的申明,类型是 void (*)(int)
b) void (*f[3])() f是一个函数指针的数组, 类型是 void (*)(void)

可以看出两者之间类型不匹配,将 void(*f[3])()改为
void(*f[3])(int)即可。
供你参考。
追问
按你的提示  确实编译过去了,但是却又进入了无限循环输出!能告诉我为什么吗?这句话f[flag-1](flag)是什么意思啊 ?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式