好的我正在尝试在WFSExecute下写这个,但如果我输入:
WFSPINGETDATA * pingetdata = lpCmdData;
我收到错误:
errorC2440:'初始化':无法从'LPVOID'转换为'WFSPINGETDATA *'
如果我注释掉该行,则应用程序执行。
另外,如果我写:
((WFSPINDATA*) (temp)) ->lpPinKeys = malloc(sizeof(LPWFSPINKEY)*NumberOfKeys) ;
我收到错误:
errorC2440:'='无法从'void'转换为'LPWFSPINKEY *'
解决此问题的任何解决方案?
答案 0 :(得分:2)
C ++在类型安全方面比C更严格。在这种情况下,void*
在分配给其他void*
以外的任何内容时必须进行类型转换。
WFSPINGETDATA * pingetdata = lpCmdData;
无法从'LPVOID'转换为'WFSPINGETDATA *'
这意味着lpCmdData
是void*
,因此需要进行类型转换:
WFSPINGETDATA * pingetdata = (WFSPINGETDATA*) lpCmdData;
或者,使用C ++风格的强制转换而不是C风格的强制转换:
WFSPINGETDATA * pingetdata = static_cast<WFSPINGETDATA*>(lpCmdData);
((WFSPINDATA*) (temp)) ->lpPinKeys = malloc(sizeof(LPWFSPINKEY)*NumberOfKeys) ;
无法从'void'转换为'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