错误[E0599]:在当前范围内未找到类型为&mut G的名为gen的方法

时间:2019-07-05 11:13:29

标签: rust quickcheck

我正在尝试使用quickcheck crate

我已经为结构["Lights","Tool Kit","Steering Wheel","Side Mirrors"]实现了Arbitrary

Point {x: u32, y: u32}

编译器说:

impl Arbitrary for Point {
    fn arbitrary<G: Gen>(g: &mut G) -> Point {
        let x = g.gen::<u32>();
        let y = g.gen::<u32>();

        Point { x, y }
    }
}

但是我确实在测试模块中有error[E0599]: no method named `gen` found for type `&mut G` in the current scope --> src/main.rs:61:23 | 61 | let x = g.gen::<u32>(); | ^^^ | = note: the method `gen` exists but the following trait bounds were not satisfied: `&mut G : rand::Rng` `G : rand::Rng` = help: items from traits can only be used if the trait is in scope = note: the following trait is implemented but not in scope, perhaps add a `use` for it: `use rand::Rng;` ,并且在我的Cargo.toml中有use rand:Rng;作为开发依赖项。

我的模块中也有rand

要创建任意生成器,我缺少什么?

---编辑- 如果您想为我运行https://gist.github.com/russelldb/49b96ca2e23dfab8a0f03090144735e4,则会重现该问题。

1 个答案:

答案 0 :(得分:1)

这似乎是快速检查的问题。 Quickcheck uses rand version 0.6.5,而最新版本为rand is 0.7.0

由于不同版本的特征不兼容,rustc会出现此错误。

要解决此问题,请在0.6.5版中将rand声明为dependecy,它将起作用。