这个问题已经有答案了:
How can I derive Hash for a struct containing a HashMap?(1个答案)
4天前关闭。
我试图在我的结构中以一种非常基本的方式使用HashMap,我被这个错误弄糊涂了。我错过了什么?
error[E0277]: the trait bound `HashMap<&str, &T>: Hash` is not satisfied
--> src/file.rs:290:5
|
282 | #[derive(PartialEq, Eq, Hash)]
| ---- in this derive macro expansion
...
290 | enums: &'a HashMap<&'a str, &'a T>,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Hash` is not implemented for `HashMap<&str, &T>`
|
= note: required for `&HashMap<&str, &T>` to implement `Hash`
= note: this error originates in the derive macro `Hash` (in Nightly builds, run with -Z macro-backtrace for more info)
示例RustPlayground:link&str
应该为它实现所有traits是/否?
下面是我用来展示这个问题的示例代码:
use std::collections::HashMap;
use std::hash::Hash;
trait Pt<'a> {
fn is_int(&self) -> bool;
}
#[derive(PartialEq, Eq, Hash)]
struct Enumeration<'a, T: Pt<'a>>
where
T: ?Sized + Eq + Hash,
{
pt: &'a T,
max_length: u8,
enum_name: &'a str,
enums: &'a HashMap<&'a str, &'a T>,
reverse_enums: HashMap<&'a T, &'a str>,
}
1条答案
按热度按时间mjqavswn1#
这个错误是关于
HashMap
本身没有实现Hash
trait。但它并没有,不管键和值的类型。因为当你对一个结构体执行#[derive(Hash)]
时,它要求它的所有元素也实现Hash
,所以你不能对你的外部结构体这样做。您可以放弃为
Enumeration
实现Hash
,也可以手动完成。