C++定义函数指针
Posted
技术标签:
【中文标题】C++定义函数指针【英文标题】:C++ Defining function pointer 【发布时间】:2013-06-28 02:56:15 【问题描述】:我正在尝试在 c++ 中创建指向另一个函数的函数指针。
这是我目前所拥有的:
LONG (*function)(LPSTR,LPVIPERVAR4,LONG)=&CWilExtender::DllVarHandler;
当我尝试编译我的程序时,我得到了这个错误:
.\MyExtender.cpp(132) : error C2440: 'initializing' : cannot convert from
'LONG (__thiscall CWilExtender::* )(LPSTR,LPVIPERVAR4,LONG)' to
'LONG (__cdecl *)(LPSTR,LPVIPERVAR4,LONG)'
There is no context in which this conversion is possible
不知道DllVarHandler是怎么定义的,也不知道怎么复现函数指针的类型。
如何更改(_cdecl *)
以匹配(__thisscall CWilExtender::*)
?
具体来说,LONG (__thiscall CWilExtender::* )(LPSTR,LPVIPERVAR4,LONG)
是什么意思,如何将其写为函数指针的类型?
谢谢。
【问题讨论】:
c++ Function member pointer 的可能重复项 该错误消息告诉您它所期望的类型。 在 C++ 中,您可以使用虚方法,因此编写的代码既易于阅读又可以避免这个问题。改为使用和接口。 如果您没有好的 C++ 参考资料,那么您将很难掌握其中的窍门。如果不小心,即使是经验丰富的程序员也会犯这种错误。 @OliCharlesworth 是正确的,您试图表达一个与函数指针不同的成员函数指针。阅读 Oli 链接到的文章。 【参考方案1】:感谢@OliCharlesworth 和@user814628 的cmets,我解决了我的问题。
正确的代码应该是:
LONG (CWilExtender::* function)(LPSTR,LPVIPERVAR4,LONG)=&CWilExtender::DllVarHandler;
感谢您如此迅速地提供帮助!
【讨论】:
以上是关于C++定义函数指针的主要内容,如果未能解决你的问题,请参考以下文章