[英]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.