【发布时间】:2018-08-06 09:34:12
【问题描述】:
在jldupont's answer 定义具有不同数据的变量之后,我定义了以下内容:
enum buffer_format
{
FIFO_U8T = 0,
FIFO_U16T
};
struct buffer_param
{
enum buffer_format type;
union
{
struct buffer_fifo_u8_t *fifo_u8;
struct buffer_fifo_u16_t *fifo_u16;
} is;
};
然后我编写了以下作业:
struct buffer_param fifo_uartTx_param;
fifo_uartTx_param.is.fifo_u8 = &fifo_uartTx;
fifo_uartTx_param.type = FIFO_U8T;
但是,我遇到了一些错误,抱怨我不能简单地进入我的 buffer_param 类型结构来进行这些分配。如何将指针分配给 UART fifo 并设置其类型?
error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
fifo_uartTx_param.is.fifo_u8 = &fifo_uartTx;
^
error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
fifo_uartTx_param.type = FIFO_U8T;
^
【问题讨论】:
-
嗯,编译器消息告诉你问题出在哪里。访问
is联合的成员时,您需要一个点.而不是箭头->。但是编译器没有告诉你的是,你也没有为fifo_uartTx_param分配任何内存(你声明了一个指针,然后在没有初始化它的情况下取消引用该指针 - 这是未定义的行为,如果你很幸运你的程序只会崩溃)。 -
fifo_uartTx_param->is不是指针。所以访问它的字段是用. -
可能不需要将
fifo_uartTx_param设为指针,只需将其设为普通变量即可。然后使用.代替->。 -
我已按照建议进行了更改(将
fifo_uartTx_param设为普通变量并使用.访问结构字段),但在编译时仍然收到错误。
标签: c struct types variable-assignment