C错误:需要lvalue作为一元'&'操作数

5

我有一个代码错误,但不确定我的强制转换和引用有什么问题。

BOOL xMBPortSerialPutByte( CHAR ucByte )
{
    CDC_Send_DATA(&((unsigned char)ucByte), 1);   // code error here
    xMBPortEventPost(EV_FRAME_SENT);
    return TRUE;
}

CDC_Send_DATA被定义如下:
uint32_t CDC_Send_DATA (uint8_t *ptrBuffer, uint8_t Send_length);

这是错误信息:

  port/portserial.c:139:19: error: lvalue required as unary '&' operand

希望有人能够帮忙。谢谢!
1个回答

14

强制转换操作会导致类型转换,并产生一个右值。右值没有地址,因此您不能使用一元&对其进行操作。您需要获取地址并强制转换该地址

CDC_Send_DATA((unsigned char *)&ucByte, 1);

但是为了最准确,你应该在转换时匹配参数类型:

CDC_Send_DATA((uint8_t *)&ucByte, 1);

检查返回值也可能是一个好主意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接