簡體   English   中英

左值要求為一元'&'操作數

[英]lvalue required as unary '&' operand

調用函數時出現問題,如下所示:

函數調用:

Sbac_DecodeBin(pstSlice->pstBAC,&(UINT8)ui32Abs_Mvd_G_0[0],
pstSlice->pstCtxModel->aucABS_MVD_GREATER_0_1_FLAG,0,
pstSlice->pstValMps->aucABS_MVD_GREATER_0_1_FLAG,BSHandle);

函數聲明:

VOID Sbac_DecodeBin(Init_BAC *pstBAC,UINT8* piBinValue,UINT8* pucSateIdx,
UINT8 CtxInc,UINT8* pucValMPS,HEVCD_BS_HANDLE BSHandle)

上面的代碼在Visual c ++ 2008中沒有給出任何編譯錯誤,但是在linux中,通過gcc -c使用makefile創建目標文件時,出現錯誤:

lvalue required as unary '&' operand 

誰能告訴我這是什么問題?

將調用中的第二個參數從&(UINT8)ui32Abs_Mvd_G_0[0]更改為(UINT8 *)ui32Abs_Mvd_G_0

出現錯誤消息的原因是,您不能接受非左值的地址。 從uint32-> uint8進行的轉換不符合條件。 從uint32 *強制轉換為uint8 *強制轉換。

順便說一句:您正在尋找一個潛在的endianness蠢貨。 在小字節序上,您傳遞的是uint32的LSB的地址,在大字節序上,您傳遞的是MSB的地址。

UINT8是非標准的。 我猜這是特定於MSVC ++編譯器的。 嘗試改用stdint.h定義的uint8_t 使用(uint8_t*)ui32Abs_Mvd_G_0[0]來匹配類型。

編輯根據下面評論中的討論,這應該有效(UINT8*)ui32Abs_Mvd_G_0[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM