调用函数时出现问题如下:
函数调用:
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中使用makefile通过gcc -c
创建目标文件时我得到错误:
lvalue required as unary '&' operand
谁能告诉我这是什么问题?
答案 0 :(得分:5)
更改来自的调用中的第二个参数
&(UINT8)ui32Abs_Mvd_G_0[0]
至(UINT8 *)ui32Abs_Mvd_G_0
。
错误消息的原因是您无法获取不是左值的内容的地址。来自uint32的演员阵容 - > uint8没有资格。从uint32 *到uint8 *的演员阵容。
顺便说一句:你正在考虑一个潜在的终结蠢事。在little endian上,你传递了uint32的LSB的地址,在big endian上你传递了MSB的地址。答案 1 :(得分:0)
UINT8
是非标准的。我想这是MSVC ++编译器特有的。请尝试使用uint8_t
中定义的stdint.h
。使用(uint8_t*)ui32Abs_Mvd_G_0[0]
匹配类型。
修改根据以下评论中的讨论,这应该有效(UINT8*)ui32Abs_Mvd_G_0[0]