gpt4 book ai didi

rust - 在 Rust 中,如何修复错误 "the trait ` core::kinds::Sized` is not implemented for the type `Object+' a`"

转载 作者:行者123 更新时间:2023-11-29 07:54:43 26 4
gpt4 key购买 nike

使用以下代码,我收到“特性 core::kinds::Sized 未针对 Object+'a 类型实现”错误。我已经删除了触发错误不需要的所有其他代码。

fn main() {
}

pub trait Object {
fn select(&mut self);
}

pub struct Ball<'a>;

impl<'a> Object for Ball<'a> {
fn select(&mut self) {
// Do something
}
}

pub struct Foo<'a> {
foo: Vec<Object + 'a>,
}

围栏:http://is.gd/tjDxWl

完整的错误是:

<anon>:15:1: 17:2 error: the trait `core::kinds::Sized` is not implemented for the type `Object+'a`
<anon>:15 pub struct Foo<'a> {
<anon>:16 foo: Vec<Object + 'a>,
<anon>:17 }
<anon>:15:1: 17:2 note: the trait `core::kinds::Sized` must be implemented because it is required by `collections::vec::Vec`
<anon>:15 pub struct Foo<'a> {
<anon>:16 foo: Vec<Object + 'a>,
<anon>:17 }
error: aborting due to previous error
playpen: application terminated with error code 101

我是 Rust 的新手,真的不知道从这里该去哪里。有什么建议吗?

最佳答案

这里的根本问题是:

您想存储一个对象向量。现在,一个向量是一个平面数组:每个条目一个接一个。但是 Object 是一个特征,虽然您只为 Ball 实现了它,但您也可以为 Hats 和 Triangles 实现它。但是那些在内存中的大小可能不同!所以对象本身没有大小。

有两种方法可以解决这个问题:

  • 使 Foo 通用,并且在每个 Foo 中只存储一种类型的对象。我有一种感觉,这可能不是你想要的。围栏:http://is.gd/Y0fatg
  • 间接:不是将对象直接存储在数组中,而是存储 Box。这是执行此操作的围栏链接。 http://is.gd/ORkDRC

关于rust - 在 Rust 中,如何修复错误 "the trait ` core::kinds::Sized` is not implemented for the type `Object+' a`",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com