交叉引用 typedef 结构
Cross referencing typedef structs
我有 2 个结构类型定义,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;
我想创建这些结构,但这是不可能的,因为每个结构都依赖于另一个结构的定义。我收到此错误:
t.c:11:3: error: unknown type name 'ARRAY'
ARRAY children;
^
1 error generated.
这是声明 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];
};
我有 2 个结构类型定义,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;
我想创建这些结构,但这是不可能的,因为每个结构都依赖于另一个结构的定义。我收到此错误:
t.c:11:3: error: unknown type name 'ARRAY'
ARRAY children;
^
1 error generated.
这是声明 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];
};