“LPVOID”无法分配给X类型的实体

时间:2014-06-24 15:20:31

标签: c++ heapalloc

我正在处理一个处理USB设备的功能。

但我已经遇到了一个简单的问题:

我收到编译错误

A value of the type "LPVOID" can not be assigned to an entity of the type "PSP_DEVICE_INTERFACE_DETAIL_DATA" in the line 
"DevIntfDetailData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize);"

有人可以告诉我这里我做错了什么吗? 谢谢!

PSP_DEVICE_INTERFACE_DETAIL_DATA DevIntfDetailData;
DevIntfDetailData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize);

1 个答案:

答案 0 :(得分:1)

必须工作:

DevIntfDetailData = reinterpret_cast<PSP_DEVICE_INTERFACE_DETAIL_DATA>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize));

HealAlloc(与所有其他alloc函数一样)返回指向内存堆(void *)的指针,并且C ++不允许将类型为T *的set值设置为void *类型的值,而无需手动转换。

存在dynamic_cast,static_cast,reinterpret_cast和const_cast。当你想将void *转换为任何指针时,你必须使用reinterpret_cast,因为它在没有任何检查的情况下转换类型(将void *转换为任何T *都不会通过任何检查)。