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

在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
 类似资料:
  • 我希望这能奏效: ...但它没有: 游戏Geofence:http://is.gd/kxDt0P 那么,发生了什么事? 我不知道这个错误是什么意思。 是因为我使用的是Result,而这要求U,V不是大小的吗?在这种情况下,它们的尺寸为何?我没有写: 所有泛型现在都是动态调整大小还是什么?(在这种情况下,大小是什么?甚至是什么意思?) 怎么回事啊?

  • 我有广泛的基本特征。有些类型只关心其功能的子集,所以我添加了一个子集,要求用户实现更小的功能集。 此代码失败: 出现以下错误: 有趣的是,当我删除上的通用性时,它就起作用了: stackoverflow上的其他一些帖子也提到了类似的问题,但它们通常都有关于外来特征的问题(来自标准库的)。在我的案例中,特质和类型都是本地的,因此就我所知,孤儿规则不应该生效。 基本上,错误提到下游板条箱可能实现tra

  • 我有一个问题: 多个结构实现一个trait 都可以以相同的方式实现trait 我考虑过写这个(简短版本) 游戏场 这无法编译: 这里怎么了?或者有没有其他方法可以通用地实现此,而不必为和分别键入一次? 谢谢你们

  • 作为一个学习项目,我正在编写一个通过TCP的聊天服务器。我今天一直在修补ws crate,但我遇到了一个问题。这是我编写的代码,修改了他们的服务器示例。 当我尝试编译它时,我得到一个错误: 为什么会这样?我怎样才能解决这个问题?