2014-06-24 35 views
0

我正在處理一個處理USB設備的函數。「LPVOID」不能分配給X型實體

但是我已經在簡單的東西有一個問題:

我收到編譯器錯誤

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); 
+3

C++需要爲此轉換(C不)。 – crashmstr

+1

DevIntfDetailData = reinterpret_cast Arkady

+0

@Arkady非常感謝!你能評論你的答案嗎? – tmighty

回答

1

即必須工作:

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

HealAlloc(像所有其它的alloc函數)返回指針到存儲器堆(無效*),以及C++不能允許類型T *的設定值,以類型爲void *的值,無需手動轉換。

存在dynamic_cast,static_cast,reinterpret_cast和const_cast。當你想將void *轉換爲任何指針時,你必須使用reinterpret_cast,因爲它轉換類型時沒有任何檢查(將void *轉換爲任何T *都不會通過任何檢查)。

相關問題