2013-09-10 79 views
4

我有一个代码错误,但不知道我的铸造和参考有什么问题。C错误:左值需要作为一元'&'操作数

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 

希望有人能够帮助。谢谢!

回答

10

投射操作导致转换,产生右值。一个右值没有地址,所以你不能用一个一元&对它进行操作。你需要采取的地址,然后投

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

不过是最正确的,你应该匹配在投参数类型:

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

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

相关问题