为什么这个类型不能解析?
Why can this type not be resolved?
我的 C 头文件中有以下代码:
typedef struct mb32_packet_t {
uint8_t compid;
uint8_t servid;
uint8_t payload[248];
uint8_t checksum;
} __attribute__((packed)) mb32_packet_s;
正在做以下工作:
struct mb32_packet_t packet;
使用时:
mb32_packet_t packet;
我得到:
Type 'mb32_packet_t' could not be resolved
Unknown type name 'mb32_packet_t'; use 'struct' keyword to refer to the type
typedef struct
不正是为了这个目的,即在定义这种类型的变量时能够省略 struct 关键字吗?
您在 typedef
定义的别名叫做 mb32_packet_s
。所以你需要使用它作为
mb32_packet_s packet;
或
struct mb32_packet_t packet;
您也可以将别名重命名为 mb32_packet_t
:
typedef struct mb32_packet_t {
uint8_t compid;
uint8_t servid;
uint8_t payload[248];
uint8_t checksum;
} __attribute__((packed)) mb32_packet_t;
那么你可以两者都做(没有别名的原名)
struct mb32_packet_t packet;
和(带别名)
mb32_packet_t packet;
这样,别名和结构的名称是相同的,但从技术上讲,struct mb32_packet_t
和 mb32_packet_t
是两个不同的东西,但是指的是同一类型。
声明 typedef struct mb32_packet_t ... mb32_packet_s;
使 mb32_packet_t
成为仅在关键字 struct
之后起作用的标记,并使 mb32_packet_s
成为独立起作用的类型名称。要使 mb32_packet_t
成为类型名称,请在声明中交换它们或在两个地方使用 mb32_packet_t
。
在您的 typedef struct...
代码中,mb32_packet_t
是一个 ,而不是定义类型的名称,即 mb32_packet_s
。您可以在变量声明中使用标记,但 仅 如果您还包含 struct
关键字。
要声明一个类型的变量而没有struct
关键字,你需要使用类型的实际名称,如下:
mb32_packet_s packet; // Note the "_s" rather than "_t" and the end.
我的 C 头文件中有以下代码:
typedef struct mb32_packet_t {
uint8_t compid;
uint8_t servid;
uint8_t payload[248];
uint8_t checksum;
} __attribute__((packed)) mb32_packet_s;
正在做以下工作:
struct mb32_packet_t packet;
使用时:
mb32_packet_t packet;
我得到:
Type 'mb32_packet_t' could not be resolved
Unknown type name 'mb32_packet_t'; use 'struct' keyword to refer to the type
typedef struct
不正是为了这个目的,即在定义这种类型的变量时能够省略 struct 关键字吗?
您在 typedef
定义的别名叫做 mb32_packet_s
。所以你需要使用它作为
mb32_packet_s packet;
或
struct mb32_packet_t packet;
您也可以将别名重命名为 mb32_packet_t
:
typedef struct mb32_packet_t {
uint8_t compid;
uint8_t servid;
uint8_t payload[248];
uint8_t checksum;
} __attribute__((packed)) mb32_packet_t;
那么你可以两者都做(没有别名的原名)
struct mb32_packet_t packet;
和(带别名)
mb32_packet_t packet;
这样,别名和结构的名称是相同的,但从技术上讲,struct mb32_packet_t
和 mb32_packet_t
是两个不同的东西,但是指的是同一类型。
声明 typedef struct mb32_packet_t ... mb32_packet_s;
使 mb32_packet_t
成为仅在关键字 struct
之后起作用的标记,并使 mb32_packet_s
成为独立起作用的类型名称。要使 mb32_packet_t
成为类型名称,请在声明中交换它们或在两个地方使用 mb32_packet_t
。
在您的 typedef struct...
代码中,mb32_packet_t
是一个 mb32_packet_s
。您可以在变量声明中使用标记,但 仅 如果您还包含 struct
关键字。
要声明一个类型的变量而没有struct
关键字,你需要使用类型的实际名称,如下:
mb32_packet_s packet; // Note the "_s" rather than "_t" and the end.