如何解决错误C2664:无法将参数1从\'int\'转换为\'int__cdecl *int\'
| 在将一个函数作为另一个函数的参数传递时遇到一些麻烦... 错误:错误1错误C2664:“包装器” :无法从转换参数1 \'int \'到\'int(__cdecl *)(int)\'int inc( int n )
{
return n + 1 ;
}
int dec( int n )
{
return n - 1 ;
}
int wrapper( int i,int func(int) )
{
return func( i ) ;
}
int main(){
int a = 0 ;
a = wrapper( 3,inc( 3 ) ) ;
return 0 ;
}
解决方法
您正在将函数调用
inc(3)
的结果传递给wrapper
,而不是所期望的函数指针。
a = wrapper(3,&inc) ;
, 您的呼叫传递了一个整数,即呼叫inc(3)
的返回值,即4。
那不是函数指针。
也许您的意思是:
a = wrapper(3,inc);
这将起作用,并使用参数3
将a赋给调用int
的值。
, 该行:
a = wrapper( 3,inc( 3 ) ) ;
有效地:
a = wrapper(3,4);
我想你的意思是:
a = wrapper(3,inc);
这会将指向inc()函数的指针作为wrapper()的第二个参数传递。
, 现在,wrapper
取int
,而指向一个函数的指针取one6ѭ并返回an6ѭ。您正在尝试将其传递给一个int和一个int,因为您不是在向函数传递指针,而是在调用函数并传递返回值(int
)。为了使您的代码按预期运行(我认为),请将对wrapper
的调用更改为:
a = wrapper(3,&inc);
, 我的程序中出现此错误:
error C2664: \'glutSpecialFunc\' : cannot convert parameter 1 from \'void (__cdecl *)(void)\' to \'void (__cdecl *)(int,int,int)\'
因为我写的方法定义晚于main方法。
当我剪切主要方法并在功能定义之后粘贴它时,错误已消除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。