双递归结构

时间:2012-11-19 23:21:44

标签: c++ recursion struct

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

    struct MyStruct {
        MyStruct* p;
    };

但是,例如,

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

这不会编译。

2 个答案:

答案 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;
    };