2013-06-03 52 views
-2

我使用g ++編譯c代碼並在某些問題中運行。 固定指定初始化我留下了這個錯誤後:使用g ++編譯C代碼:無效轉換

error: invalid conversion from 'void*' to '__u8*' 

這是我的代碼:

static inline void put_unaligned_le16(__u16 val, __u16 *cp) 
    { 
     __u8 *p = (void *)cp; 

     *p++ = (__u8) val; 
     *p++ = (__u8) (val >> 8); 
    } 

任何解決這個幫助表示讚賞! 謝謝!

+2

的錯誤是相當清楚:你正試圖用'void *'初始化'__u8 *',這在C(隱式轉換)中是合法的,但是不在C++ _中(它的類型系統是「更安全」)。或者使用GCC進行編譯或者將'cp'顯式地轉換爲'__u8 *'(但是要注意嚴格的別名問題......) –

+0

在C++中,void指針必須明確指定。 –

回答

4

不要嘗試使用C++編譯器編譯C代碼。永遠。他們是非常不同的,不同的語言。


(如果一些奇怪的自虐原因做盡管如此,那麼你要投void *__u8 *,因爲在C++中,從void *隱式轉換不會發生。太糟糕了。)

+0

謝謝!不過,我想修改這個gadgetfs示例(www.linux-usb.org/gadget/usb.c),因此需要使用C++代碼。 – tzippy

+0

@tzippy我不明白你爲什麼需要。**這是一個C文件。使用C編譯器編譯它。 – 2013-06-03 09:56:38

+0

我想使用std :: vector,所以我需要g ++編譯器。這有什麼不好? – tzippy