C++比C更严格。在这种情况下,void*
必须在分配给除void*
之外的其他任何东西时进行类型转换。
WFSPINGETDATA * pingetdata = lpCmdData;
cannot convert from 'LPVOID' to 'WFSPINGETDATA *'
这意味着lpCmdData
是void*
,因此需要一种类型的播送:
WFSPINGETDATA * pingetdata = (WFSPINGETDATA*) lpCmdData;
或者,使用C++ - 式投代替C样式转换:
WFSPINGETDATA * pingetdata = static_cast<WFSPINGETDATA*>(lpCmdData);
((WFSPINDATA*) (temp)) ->lpPinKeys = malloc(sizeof(LPWFSPINKEY)*NumberOfKeys) ;
cannot convert from 'void' to 'LPWFSPINKEY *'
malloc()
返回一个void*
,所以需要一个类型演员编辑在这里也:
((WFSPINDATA*) (temp)) ->lpPinKeys = (LPWFSPINKEY*) malloc(sizeof(LPWFSPINKEY)*NumberOfKeys);
或者,使用C++ - 风格的转换:
static_cast<WFSPINDATA*>(temp)->lpPinKeys = static_cast<LPWFSPINKEY*>(malloc(sizeof(LPWFSPINKEY)*NumberOfKeys));
或者,使用C++ - 风格分配的,而不是C风格的分配:
static_cast<WFSPINDATA*>(temp)->lpPinKeys = new LPWFSPINKEY[NumberOfKeys];
// must use 'delete[] lpPinKeys' instead of 'free(lpPinKeys)' to deallocate the memory
在C++中,必须明确地从'void *'转换为其他指针类型。在C中,建议不要使用演员。我很好奇为什么你不使用'operator new'? – Danh