各位来看看,error C2664的有关问题
各位大虾来看看,error C2664的问题
我想用C++实现重叠I/O模型(完成例程)的一个类,
在类中定义了成员函数,void CALLBACK WorkerRoutine(DWORD ,DWORD ,LPWSAOVERLAPPED ,DWORD );也即是完成例程的函数,
在这个类的另外一个成员函数中,使用了WSARecv(AcceptSocket,&DataBuf,1,&RecvBytes,&Flags,&OverLapped,&DataCollectionClass::WorkerRoutine)函数,完成例程函数用&DataCollectionClass::WorkerRoutine引用,发生如下错误:
error C2664: 'WSARecv ' : cannot convert parameter 7 from 'void (__stdcall DataCollectionClass::* )(DWORD,DWORD,LPWSAOVERLAPPED,DWORD) ' to 'LPWSAOVERLAPPED_COMPLETION_ROUTINE '
1> There is no context in which this conversion is possible
这是什么原因呢??!?!?!?
------解决方案--------------------
如果我没猜错,你那个函数只是一个普通类成员吧?
回调函数要全局或者静态函数。
如果不是这个原因,那你就仔细看看你函数的哪个参数搞错了没有
------解决方案--------------------
WorkerRoutine静态函数
------解决方案--------------------
你的头文件是这样吧:
class DataCollectionClass
{
public:
static void __stdcall WorkerRoutine(unsigned long,unsigned long,struct _OVERLAPPED *,unsigned long);
}
那cpp里边应该是酱紫:
void __stdcall DataCollectionClass::WorkerRoutine(unsigned long,unsigned long,struct _OVERLAPPED *,unsigned long)
{
}
你看看是否有什么不对的。
这个错误的意思是你申明了这个函数但是没实现它
------解决方案--------------------
用全局函数或类的静态方法。
我想用C++实现重叠I/O模型(完成例程)的一个类,
在类中定义了成员函数,void CALLBACK WorkerRoutine(DWORD ,DWORD ,LPWSAOVERLAPPED ,DWORD );也即是完成例程的函数,
在这个类的另外一个成员函数中,使用了WSARecv(AcceptSocket,&DataBuf,1,&RecvBytes,&Flags,&OverLapped,&DataCollectionClass::WorkerRoutine)函数,完成例程函数用&DataCollectionClass::WorkerRoutine引用,发生如下错误:
error C2664: 'WSARecv ' : cannot convert parameter 7 from 'void (__stdcall DataCollectionClass::* )(DWORD,DWORD,LPWSAOVERLAPPED,DWORD) ' to 'LPWSAOVERLAPPED_COMPLETION_ROUTINE '
1> There is no context in which this conversion is possible
这是什么原因呢??!?!?!?
------解决方案--------------------
如果我没猜错,你那个函数只是一个普通类成员吧?
回调函数要全局或者静态函数。
如果不是这个原因,那你就仔细看看你函数的哪个参数搞错了没有
------解决方案--------------------
WorkerRoutine静态函数
------解决方案--------------------
你的头文件是这样吧:
class DataCollectionClass
{
public:
static void __stdcall WorkerRoutine(unsigned long,unsigned long,struct _OVERLAPPED *,unsigned long);
}
那cpp里边应该是酱紫:
void __stdcall DataCollectionClass::WorkerRoutine(unsigned long,unsigned long,struct _OVERLAPPED *,unsigned long)
{
}
你看看是否有什么不对的。
这个错误的意思是你申明了这个函数但是没实现它
------解决方案--------------------
用全局函数或类的静态方法。