繁体   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