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++定义函数指针的主要内容,如果未能解决你的问题,请参考以下文章

C++基础3(函数指针结构体)

C++基础3(函数指针结构体)

c++的函数指针是怎么用的呀?

C++定义函数指针

C++指针问题,请问如何定义一个返回值为结构体指针数组的函数?

C++指向对象成员函数的指针