2

我对如何创建两个相互引用的结构感到困惑。我找不到任何像以前那样问过的问题。
所以,我知道这会编译得很好:

    struct MyStruct {
        MyStruct* p;
    };

但是,例如,

    struct A {
        B* pBstruct;
    };
    struct B {
        A* pAstruct;
    };

这不会编译。

4

2 回答 2

5

您需要前向声明以使类型为人所知:

struct B;
struct A {
    B* pBstruct;
};
struct B {
    A* pAstruct;
};
于 2012-11-19T23:23:15.640 回答
2

所以,我知道我问过它,但我想通了,并认为回答它可能会帮助其他人。

就像制作递归函数一样,结构也必须进行原型设计。
因此,考虑制作递归函数:

    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;
    };
于 2012-11-19T23:34:04.987 回答