lvalue需要作为一元'&'操作数

时间:2013-01-23 09:15:10

标签: c linux visual-c++ compilation

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

函数调用:

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 

谁能告诉我这是什么问题?

2 个答案:

答案 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]