【问题标题】:C++ Defining function pointerC++定义函数指针
【发布时间】: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 链接到的文章。

标签: c++ function pointers


【解决方案1】:

感谢@OliCharlesworth 和@user814628 的cmets,我解决了我的问题。

正确的代码应该是:

LONG (CWilExtender::* function)(LPSTR,LPVIPERVAR4,LONG)=&CWilExtender::DllVarHandler;

感谢您如此迅速地提供帮助!

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2011-07-26
    • 2021-11-02
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多