E0072

未匹配的标注

递归类型的大小是无限的,因为它没有间接。

错误代码示例:

struct ListNode {
    head: u8,
    tail: Option<ListNode>, // error: 没有间接性所以不能计算类型的大小。
}

在定义递归结构或枚举体时,任何在其内部定义的类型都必须在指针之后产生(如 Box ,& 或 Rc)。这是因为结构或枚举体必须有确定的大小,如果没有指针,类型的大小就会是无限制的。

在本例中,类型没有确定的大小,因为它可以无限大(因为我们可以将 ListNodes 嵌套到任意深度)具体地说,

size of `ListNode` = 1 byte for `head`
                   + 1 byte for the discriminant of the `Option`
                   + size of `ListNode`

解决此问题的一个方法是将 ListNode 包装进 Box , 像这样:

struct ListNode {
    head: u8,
    tail: Option<Box<ListNode>>,
}

因为 Box 是一个指针,所以其大小是已知的,所以整个结构体大小都是已知的。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~