Rust 具有大小超性状的性状仍有错误;std::marker::Sized不符合要求”;

Rust 具有大小超性状的性状仍有错误;std::marker::Sized不符合要求”;,rust,traits,Rust,Traits,我有以下代码: use std::collections::HashMap; trait T: Sized {} struct A; impl T for A {} fn main() { let h: HashMap<String, T>; } 使用std::collections::HashMap; 特征T:大小{} 结构A; 对{}的执行 fn main(){ 设h:HashMap; } 但编译器抱怨: error[E0277]:不满足特性绑定'T:std:

我有以下代码:

use std::collections::HashMap;

trait T: Sized {}

struct A;

impl T for A {}

fn main() {
    let h: HashMap<String, T>;
}
使用std::collections::HashMap;
特征T:大小{}
结构A;
对{}的执行
fn main(){
设h:HashMap;
}
但编译器抱怨:

error[E0277]:不满足特性绑定'T:std::marker::Sized'
-->src\main.rs:10:12
|
10 |设h:HashMap;
|^^^^^^^^^^^^^^^^^`T`在编译时没有已知的常量大小
|
=帮助:没有为'T'实现特征'std::marker::Sized'`
=注意:`std::collections::HashMap'需要`
错误[E0038]:无法将特征'T'生成对象
-->src\main.rs:10:12
|
10 |设h:HashMap;
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
=注意:该特征不能要求“Self:Sized”`
我不理解错误消息,因为我已将我的trait
t
标记为
size
。我错过什么了吗

因为我把我的特质
T
标记为
size


不,你没有。您已经说过,任何实现
T
的类型都必须是
大小的
。这一特征本身还没有确定大小。您可能需要一个trait对象(例如,
Box
)或某种泛型对象(在本上下文中无法实现)。

这可能是一个重复的对象,但我还没有找到它。让我知道,我将删除此内容并作为副本关闭。我也找不到它,所以谢谢!