0

调用函数时出现问题,如下所示:

函数调用:

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 

谁能告诉我有什么问题?

4

2 回答 2

5

将调用中的第二个参数从 更改 &(UINT8)ui32Abs_Mvd_G_0[0](UINT8 *)ui32Abs_Mvd_G_0

错误消息的原因是您不能获取不是左值的地址。来自 uint32 -> uint8 的强制转换不符合条件。从 uint32* 到 uint8* 的转换可以。

顺便说一句:你正在寻找一个潜在的字节顺序错误。在 little endian 上,您正在传递 uint32 的 LSB 的地址,在 big endian 上,您正在传递 MSB 的地址。

于 2013-01-23T09:29:37.117 回答
0

UINT8是非标准的。我猜它是特定于 MSVC++ 编译器的。尝试使用uint8_tdefined instdint.h代替。用于(uint8_t*)ui32Abs_Mvd_G_0[0]匹配类型。

编辑根据下面评论中的讨论,这应该有效(UINT8*)ui32Abs_Mvd_G_0[0]

于 2013-01-23T09:19:42.133 回答