我试图转发声明struct_A并在struct_B
中使用它,而不是将其用作指针,而是将其用作结构。
在struct_B
中,我引用了struct_B
。
我似乎无法正确解决-帮助? 这是我的代码:
struct type_A_t;
typedef struct type_A_t type_A_t;
typedef struct type_B_t {
type_A_t a;
};
struct type_A_t{
void (*cb)(type_B_t *b1);
void (*cb)(type_B_t *b2);
};
我得到的错误是:
错误:字段“ type_A_t”的类型不完整
答案 0 :(得分:3)
您不能那样做。但是在您的示例中,由于type_A_t
只需要了解指向type_B_t
的指针,为什么不这样切换呢?
typedef struct type_B_t type_B_t;
typedef struct type_A_t type_A_t;
struct type_A_t {
void(*cb)(type_B_t *b1);
void(*cb)(type_B_t *b2);
};
typedef struct type_B_t {
type_A_t a;
};
答案 1 :(得分:0)
我似乎无法正确解决-帮助?
因为无法完成。
编译器不知道该结构的大小。
尽管如此,对于指针而言,前向声明已足够:
typedef struct type_B_t {
type_A_t a; // error
type_A_t* a; // OK
};
当然,如果在您的真实代码中,您可以切换顺序(如@Blaze的答案所述),就可以这样做。
答案 2 :(得分:0)
那是不可能的。要将类型用作成员,必须知道类型的大小,因此必须完全定义它。否则,sizeof(struct type_B_t)
在定义后将是未知的,这是没有道理的。