2016-01-08 37 views
0

好的,我尝试WFSExecute下写这个,但如果我键入:如果我注释掉初始化:不能从LPVOID错误转换

errorC2440: 'initializing' : cannot convert from 'LPVOID' to 'WFSPINGETDATA *'

WFSPINGETDATA * pingetdata = lpCmdData; 

我得到一个错误行,应用程序执行。

另外,如果我写:

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

我得到一个错误:

errorC2440: '=' cannot convert from 'void' to 'LPWFSPINKEY *'

任何解决方案来解决这个问题?

+0

在C++中,必须明确地从'void *'转换为其他指针类型。在C中,建议不要使用演员。我很好奇为什么你不使用'operator new'? – Danh

回答

1

C++比C更严格。在这种情况下,void*必须在分配给除void*之外的其他任何东西时进行类型转换。

WFSPINGETDATA * pingetdata = lpCmdData; 

cannot convert from 'LPVOID' to 'WFSPINGETDATA *'

这意味着lpCmdDatavoid*,因此需要一种类型的播送:

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 
+0

回答得很清楚。 –

相关问题