我有结构的两种类型定义,ARRAY和OBJECT。
ARRAY中的元素属于OBJECT。 OBJECT(当它的TYPE是COMPLEX时)有它的孩子的数组
enum {
INT,
FLOAT,
STRING,
CHAR,
COMPLEX
} typedef TYPE;`
`struct {
TYPE type;
ARRAY children;
char name[50];
} typedef OBJECT;`
`struct {
OBJECT* elements;
int size;
} typedef ARRAY;
我想创建这些结构,但这是不可能的,因为一个依赖于另一个的定义。
这是一种声明TYPE
,OBJECT
和ARRAY
类型别名的方法,使用OBJECT
类型别名的前向声明来避免循环依赖。这需要声明关联的struct
类型,并使用与其后续完整声明匹配的标记。
typedef enum {
INT,
FLOAT,
STRING,
CHAR,
COMPLEX
} TYPE;
// incomplete declaration of struct _OBJECT and OBJECT
typedef struct _OBJECT OBJECT;
typedef struct {
OBJECT* elements;
int size;
} ARRAY;
// complete declaration of struct _OBJECT
struct _OBJECT {
TYPE type;
ARRAY children;
char name[50];
};