初始化:无法转换为LPVOID错误

时间:2016-01-08 06:30:08

标签: c++ cen-xfs

好的我正在尝试在WFSExecute下写这个,但如果我输入:

WFSPINGETDATA * pingetdata = lpCmdData;

我收到错误:

  

errorC2440:'初始化':无法从'LPVOID'转换为'WFSPINGETDATA *'

如果我注释掉该行,则应用程序执行。

另外,如果我写:

((WFSPINDATA*) (temp)) ->lpPinKeys = malloc(sizeof(LPWFSPINKEY)*NumberOfKeys) ;

我收到错误:

  

errorC2440:'='无法从'void'转换为'LPWFSPINKEY *'

解决此问题的任何解决方案?

1 个答案:

答案 0 :(得分:2)

C ++在类型安全方面比C更严格。在这种情况下,void*在分配给其他void*以外的任何内容时必须进行类型转换。

WFSPINGETDATA * pingetdata = lpCmdData;
     

无法从'LPVOID'转换为'WFSPINGETDATA *'

这意味着lpCmdDatavoid*,因此需要进行类型转换:

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