错误:从'void(FlashWork :: *)(int,siginfo_t *,void *)'转换为'void *(*)(int,siginfo_t *,void *)'

时间:2012-03-29 12:28:01

标签: c++ c linux signals

我是一名C程序员(在Linux上),但现在我有一个关于C ++的项目,并且有一个问题。

以下是示例代码

g_action.sa_sigaction = (void(*)(int,siginfo_t*,void*))&FlashWork::Disconnect_action; 

当我尝试在x86上编译它时,它工作正常,但在手臂上我得到以下错误

  

错误:从void (FlashWork::*)(int, siginfo_t*, void*)转换为void (*)(int, siginfo_t*, void*)

我做错了什么?

3 个答案:

答案 0 :(得分:3)

“指向成员的指针”与“指向函数的指针”不兼容,除非它是static成员。原因是指向成员的指针需要一个对象(FlashWork对象)。

答案 1 :(得分:1)

您的函数是一个返回void的成员函数。它应该是一个非成员函数(或静态成员函数),它返回void *

答案 2 :(得分:1)

除了函数的返回值不同之外,您应该知道在C ++中,当您有成员函数(非静态)时:

void (FlashWork::*)(int, siginfo_t*, void*)

真正的签名(C程序员喜欢看的那个)是这样的:

void (*)(FlashWork *, int, siginfo_t *, void *)

FlashWork *参数是隐藏指针,可由this引用。

因此,

void (FlashWork::*)(int, siginfo_t*, void*)

void (*)(int, siginfo_t*, void*)

有不同数量的论点。