各位大神,c++下关于function/bind与回调函数 3C
 //void  fRealDataCallBack(LONG lRealHandle,DWORD dwDataType,BYTE *pBuffer,DWORD dwBufSize,void *pUser);
 typedef function<void (LONG,DWORD,BYTE *,DWORD,void *)> func;
 func f1 = bind(&HikSDK::fRealDataCallBack,this,placeholders::_1,placeholders::_2,placeholders::_3,placeholders::_4,placeholders::_5);

这是关于function与bind定义的回调函数,被调函数原型为注释,原调函数为

 typedef void (CALLBACK *REALDATACALLBACK) (LONG lPlayHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser);

报错为图片说明

这个怎么解决?

2个回答

&HikSDK::fRealDataCallBack这个函数怎么定义的,它是不是成员函数(成员函数包括隐含的this参数,所以不可以)

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复张嫩嫩: 如果这个函数是你定义的,定义成静态函数
接近 3 年之前 回复
zhangmeng1021
张嫩嫩 是成员函数,我问了一下其他人,他们说function不可转换为函数指针,只能函数指针转换为function,是不是?
接近 3 年之前 回复

好像有两个问题
1.C++成员函数会绑定一个this指针在参数列表最前面,所以func f1=bind(...)这一行应该会有问题
2.lRealPlayHandle = NET_DVR_RealPlay_V40(lUserUD,&struPlayInfo,&f1,NULL);这样f1前面应该不需要&符号吧,因为f1本身已经是函数指针,报错信息里面对funcReal的详细描述里面尾巴上也是多一个*

参考下这个
void CALLBACK myStreamProc(LONG lPlayHandle, DWORD dwDataType, BYTE pBuffer, DWORD dwBufSize, void pUser)
streamHandle = NET_DVR_RealPlay_V40(m_u32Handle, &struPlayInfo, myStreamProc, this);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问