关于C ++结构和数组的一些问题

时间:2009-10-18 11:56:25

标签: c++ struct

我对C ++比较陌生,在理解struct时遇到了问题。

我有一个声明如下的结构

struct MyNode {
    int level;
    int index;
    MyNode children[4];
}

但是代码无法编译并报告错误C2148:数组的总大小不得超过0x7fffffff字节。

但以下代码编译

struct MyNode {
    int level;
    int index;
    MyNode* children;
}

我可以像第一个例子中那样编码MyNode,或者是否有我遗漏的东西。

谢谢!

4 个答案:

答案 0 :(得分:5)

这无法编译,因为编译器需要知道每种类型的大小。 那么,sizeof(MyNode)是什么?它是sizeof(int) * 2 + sizeof(MyNode):递归使得大小无法弄清楚。

您需要一个指针,如第二个示例所示。为什么会这样?因为sizeof(MyNode*)已知:它是目标平台上地址的大小。

答案 1 :(得分:1)

第一个示例的问题是您对结构进行了递归扩展。每个子节点MyNode本身都包含四个MyNode,而MyNode又包含另外四个MyNode,而这些MyNode又可以得到图片。

您需要为每个孩子使用一个指针来指示树的深度。

答案 2 :(得分:1)

看看this。您需要了解“前向参考”。

答案 3 :(得分:0)

您无法构造使用其自己的类型作为其字段之一的类型的结构,因为在运行时,编译器将不知道总结构的大小。你如何编写结构正是它在内存中的样子,即4个字节的级别,4个字节的索引和?? MyNode的字节数。看到问题了?

现在在第二个例子中,你知道MyNode :: children的类型,它是一个指针,所以它的大小是4(在32位windows系统上),所以结构的总大小是已知的:4 + 4 + 4 = 12