我是一名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*)
我做错了什么?
答案 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*)
有不同数量的论点。