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”`
我不理解错误消息,因为我已将我的traitt
标记为size
。我错过什么了吗
因为我把我的特质T
标记为size
不,你没有。您已经说过,任何实现
T
的类型都必须是大小的。这一特征本身还没有确定大小。您可能需要一个trait对象(例如,Box
)或某种泛型对象(在本上下文中无法实现)。这可能是一个重复的对象,但我还没有找到它。让我知道,我将删除此内容并作为副本关闭。我也找不到它,所以谢谢!