rust 为什么编译器说当我把一个HashMap放在我的结构中时,Hash没有实现?[副本]

s3fp2yjn  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(77)

这个问题已经有答案了

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>,
    }
mjqavswn

mjqavswn1#

这个错误是关于HashMap本身没有实现Hash trait。但它并没有,不管键和值的类型。因为当你对一个结构体执行#[derive(Hash)]时,它要求它的所有元素也实现Hash,所以你不能对你的外部结构体这样做。
您可以放弃为Enumeration实现Hash,也可以手动完成。

相关问题