使用以下代码,我得到“特征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>,
}
完整错误是:
<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很新,不知道从哪里开始。有什么建议吗?
答案 0 :(得分:4)
这里的根本问题是:
您想要存储对象矢量。现在,向量是一个平面数组:每个条目都是一个接一个。 但是Object是一个特性,虽然你只为Ball实现了它,你也可以为帽子和三角形实现它。但那些在内存中的大小可能不同!因此,对象本身没有大小。
有两种解决方法: