C++ 在类型安全方面比 C 更严格。在这种情况下,void*
当分配给 other 以外的任何东西时,必须进行类型转换void*
。
WFSPINGETDATA * pingetdata = lpCmdData;
无法从“LPVOID”转换为“WFSPINGETDATA *”
这意味着lpCmdData
是 a void*
,因此需要进行类型转换:
WFSPINGETDATA * pingetdata = (WFSPINGETDATA*) lpCmdData;
或者,使用 C++ 风格的转换而不是 C 风格的转换:
WFSPINGETDATA * pingetdata = static_cast<WFSPINGETDATA*>(lpCmdData);
((WFSPINDATA*) (temp)) ->lpPinKeys = malloc(sizeof(LPWFSPINKEY)*NumberOfKeys) ;
无法从“void”转换为“LPWFSPINKEY *”
malloc()
返回 a 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