简体   繁体   中英

“LPVOID” can not be assigned to an entity of the type X

I am dealing with a function that deals with USB devices.

But I am already having a problem at something simple:

I am getting the compiler error

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);"

Could anybody please tell me what I am doing wrong here? Thank you!

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

That have to work:

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

HealAlloc (like all other alloc function) returns pointer to memory heap (void*), and C++ can't allow set value of type T* to value of type void* without manual casting.

There exist dynamic_cast, static_cast, reinterpret_cast and const_cast. When you want to convert void* to any pointer, you have to use reinterpret_cast, because it converts types without any checking (converting void* to any T* will not pass any check).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM