具有大小的supertrait的特征仍然有错误"std :: marker :: Sized不满意"

Cou*_*ero 3 traits rust

我有以下代码:

use std::collections::HashMap;

trait T: Sized {}

struct A;

impl T for A {}

fn main() {
    let h: HashMap<String, T>;
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨:

error[E0277]: the trait bound `T: std::marker::Sized` is not satisfied
  --> src\main.rs:10:12
   |
10 |     let h: HashMap<String, T>;
   |            ^^^^^^^^^^^^^^^^^^ `T` does not have a constant size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `T`
   = note: required by `std::collections::HashMap`

error[E0038]: the trait `T` cannot be made into an object
  --> src\main.rs:10:12
   |
10 |     let h: HashMap<String, T>;
   |            ^^^^^^^^^^^^^^^^^^ the trait `T` cannot be made into an object
   |
   = note: the trait cannot require that `Self : Sized`
Run Code Online (Sandbox Code Playgroud)

我不明白错误信息,因为我已将我的特征标记TSized.我错过了什么吗?

She*_*ter 5

因为我把我的特质标记TSized

不,你没有.你已经说过任何实现的T类型必须是Sized.该性状本身仍然未上浆.你需要一个特质对象(例如Box<T>)或某种泛型(在这种情况下你不能做).