我想要将父结构和子结构进行双向链接。在C++中,我知道这是可行的。
struct child;
struct parent{
child* c;
} ;
struct child{
parent* p;
} ;
但在C语言中,使用typedef时我无法避免警告出现。
struct child;
typedef struct {
struct child* c;
} parent;
typedef struct {
parent* p;
} child;
int main(int argc, char const *argv[]){
parent p;
child c;
p.c = &c;
c.p = &p;
return 0;
}
这个错误提示信息是“warning: assignment to ‘struct child *’ from incompatible pointer type ‘child *’”。第一个子结构体被覆盖了吗?还是现在有两个不同的数据结构,即struct child
和child
?
C语言中是否可能发生这种情况呢?我的第二个想法是使用void*
,并将其转换为child类型,但是到目前为止,这两种选项都让我感到不爽。
typedef struct child { ... } child;
。否则编译器无法连接两者。 - dxiv