我对如何创建两个相互引用的结构感到困惑。我之前找不到任何问题 所以,我知道这将编译得很好:
struct MyStruct {
MyStruct* p;
};
但是,例如,
struct A {
B* pBstruct;
};
struct B {
A* pAstruct;
};
这不会编译。
答案 0 :(得分:4)
您需要一个前向声明才能知道该类型:
struct B;
struct A {
B* pBstruct;
};
struct B {
A* pAstruct;
};
答案 1 :(得分:1)
所以,我知道我问过它,但我想出来并认为回答它可能对其他人有帮助。
就像制作递归函数一样,结构也必须是原型 所以,考虑制作递归函数:
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'指针'变量和 not 结构变量。这将无法编译,因为它会创建一个无限大的结构:
struct A;
struct B;
struct A {
B pBstruct;
};
struct B {
A pAstruct;
};