我对如何创建两个相互引用的结构感到困惑。我找不到任何像以前那样问过的问题。
所以,我知道这会编译得很好:
struct MyStruct {
MyStruct* p;
};
但是,例如,
struct A {
B* pBstruct;
};
struct B {
A* pAstruct;
};
这不会编译。
您需要前向声明以使类型为人所知:
struct B;
struct A {
B* pBstruct;
};
struct B {
A* pAstruct;
};
所以,我知道我问过它,但我想通了,并认为回答它可能会帮助其他人。
就像制作递归函数一样,结构也必须进行原型设计。
因此,考虑制作递归函数:
int fnc_a();
int fnc_b();
int fnc_a()
{
fnc_b();
}
int fnc_b()
{
fnc_a();
}
前两行标识为函数的原型,以便在提供实际定义/声明之前可以使用它们。
现在考虑再次创建两个递归结构:
struct A;
struct B;
struct A {
B* pBstruct;
};
struct B {
A* pAstruct;
};
前两行声明了这两个结构的存在,以便在声明它们之前可以使用它们。(不要费心评论我只需要 B 结构原型的事实——我确实认识到这一点)
最后一点,不要忘记使用 struct 'pointer' 变量而不是struct 变量。这不会编译,因为它会创建一个无限大的结构:
struct A;
struct B;
struct A {
B pBstruct;
};
struct B {
A pAstruct;
};