我有两个结构...
typedef struct{
MY_SECOND_STRUCT s1;
}MY_FIRST_STRUCT;
typedef struct{
int s1;
}MY_SECOND_STRUCT;
我更喜欢这个顺序,我不想切换它们。但是编译器现在不知道MY_SECOND_STRUCT,我得到错误
错误:“MY_SECOND_STRUCT”之前需要指定符限定符列表
我试过在顶部添加声明
struct MY_SECOND_STRUCT;
也将定义更改为
typedef struct{
struct MY_SECOND_STRUCT s1;
}MY_FIRST_STRUCT;
但是没有用。
3条答案
按热度按时间nsc4cvqm1#
我喜欢这个订单,我不想调换。
你得换掉它们。
如果
MY_FIRST_STRUCT
有一个MY_SECOND_STRUCT
类型的成员变量,那么在定义MY_FIRST_STRUCT
之前,必须定义并完成MY_SECOND_STRUCT
(而不仅仅是声明和不完整)。ujv3wf0j2#
这个顺序不可能,你得调换一下.
但是,如果将成员声明为指针,则不需要切换:
或者,在C++中,您可以使用模板作为:
当你想使用
MY_FIRST_STRUCT
的时候,只要使用typedef
:现在使用
MY_FIRST_STRUCT
。:-)bhmjp9jg3#
在你创建第一个结构体的时候,编译器还没有遇到第二个结构体,它需要知道
MY_SECOND_STRUCT
是多少位,因为那时它需要决定MY_FISRT_STRUCT
的大小,以及如何为它布局内存,简单地向前声明结构体MY_FIRST_STRUCT
是不够的,这不会告诉编译器结构体的大小或内容。如果使用指向结构体的指针,则可以使用前向声明,但在尝试包含实际结构体时,这是不够的。你唯一真实的的选择是把
MY_SECOND_STRUCT
移到MY_FIRST_STRUCT
之上或者让MY_FIRST_STRUCT
接受一个指针,这可能一开始看起来很奇怪,但是没有什么可以做的。