当前位置: 首页 > 知识库问答 >
问题:

在Rust中,如何修复错误“trait`core::types::Sized`没有为'Object'a'类型实现”

史良哲
2023-03-14

下面的代码,我得到一个traitcore::种::大小没有实现类型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>,
}

游戏Geofence: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

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

共有1个答案

马丰
2023-03-14

这里的根本问题是:

您要存储对象的向量。现在,向量是一个平面数组:每个条目后面都有一个。但是对象是一个特性,虽然你只为球实现了它,但你也可以为帽子和三角形实现它。但这些可能在内存中大小不同!所以Object本身没有大小。

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

  • 使Foo通用,并且在每个Foo中只存储一种类型的对象。我有一种感觉,这可能不是你想要的。Geofence:http://is.gd/Y0fatg
  • 间接:不是直接在数组中存储对象,而是存储Box。这是一个游戏Geofence链接。http://is.gd/ORkDRC
 类似资料: