错误 C2664:无法将参数 1 从“int”转换为“int (__cdecl *)(int)”
Posted
技术标签:
【中文标题】错误 C2664:无法将参数 1 从“int”转换为“int (__cdecl *)(int)”【英文标题】:error C2664: cannot convert parameter 1 from 'int' to 'int (__cdecl *)(int)' 【发布时间】:2011-06-13 14:52:09 【问题描述】:在将函数作为另一个函数的参数传递时遇到了一些问题...
错误:错误 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 ;
【问题讨论】:
【参考方案1】:您将函数调用 inc(3)
的结果传递给 wrapper
,而不是预期的函数指针。
a = wrapper(3, &inc) ;
【讨论】:
【参考方案2】:您的调用传递一个整数,即调用 inc(3)
的返回值,即 4。
那不是函数指针。
也许你的意思是:
a = wrapper(3, inc);
这会起作用,并使用参数3
为调用int
分配一个值。
【讨论】:
【参考方案3】:行:
a = wrapper( 3, inc( 3 ) ) ;
有效:
a = wrapper(3, 4);
我想你的意思是:
a = wrapper(3, inc);
这会将指向 inc() 函数的指针作为 wrapper() 的第二个参数传递。
【讨论】:
【参考方案4】:就像现在一样,wrapper
采用 int
和一个指向函数的指针,该函数采用 int
并返回 int
。您正在尝试向它传递一个 int 和一个 int,因为不是传递 指向函数的指针,而是 调用 函数并传递返回值(一个int
)。要使您的代码按(我认为)您期望的那样工作,请将您对 wrapper
的调用更改为:
a = wrapper(3, &inc);
【讨论】:
非常感谢大家的快速回复..我以前遇到过这个问题,并且在不了解问题的情况下设法让它工作......现在它工作了,我明白为什么..再次感谢【参考方案5】:我的程序中有这个错误:
error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'
因为我写的方法定义晚于主方法。 当我剪切主方法并在函数定义之后粘贴时,错误被删除。
【讨论】:
以上是关于错误 C2664:无法将参数 1 从“int”转换为“int (__cdecl *)(int)”的主要内容,如果未能解决你的问题,请参考以下文章
error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [9]”转换为“LPCTSTR”
错误 C2664:“SQLGetData”:无法将参数 6 从“SDWORD *”转换为“SQLLEN *”
错误 C2664:无法将参数 2 从 'const ATL::CAdapt<ATL::CComPtr<IZipFileEntry>> *' 转换为 'ATL::CAdapt&l
error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LP