我对C ++比较陌生,在理解struct时遇到了问题。
我有一个声明如下的结构
struct MyNode {
int level;
int index;
MyNode children[4];
}
但是代码无法编译并报告错误C2148:数组的总大小不得超过0x7fffffff字节。
但以下代码编译
struct MyNode {
int level;
int index;
MyNode* children;
}
我可以像第一个例子中那样编码MyNode,或者是否有我遗漏的东西。
谢谢!
答案 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