不可紧缩的指针类型在coretelephony obj c中将int传递给void(*)(void)类型的参数

时间:2015-05-16 11:22:58

标签: c++ c core-telephony

coreTelephony.h中定义的函数是

void _CTServerConnectionRegisterForNotification(CTServerConnectionRef,void *,void(*callback)(void));

然后我试着调用这个函数

int x = 0; //placehoder for callback
_CTServerConnectionRegisterForNotification(conn,kCTCellMonitorUpdateNotification,&x);

它返回错误

  

不兼容的指针类型将int传递给coretelephony obj c中的void(*)(void)类型的参数

我错过了什么?

2 个答案:

答案 0 :(得分:0)

这里,_CTServerConnectionRegisterForNotification()的第三个参数是指向具有

的函数的指针
  • void返回类型
  • 不接受任何参数。

在这种情况下,您无法传递int的地址。这是错误的,会导致undefined behavior

答案 1 :(得分:0)

_CTServerConnectionRegisterForNotification的第三个参数是一个函数指针,并将指针传递给int。即使您成功使用强制转换,稍后当连接需要通知您时,它会尝试使用您作为函数传递的值,并且因为它不是函数,您很可能会看到崩溃。

使用函数而不是int:

void callback()
{
}

然后在您当前的代码中:

_CTServerConnectionRegisterForNotification(conn,kCTCellMonitorUpdateNotification,&callback);