gpt4 book ai didi

module - 错误[E0277] : the trait bound `my_struct::MyStruct: my_trait::MyTrait` is not satisfied

转载 作者:行者123 更新时间:2023-11-29 08:24:14 25 4
gpt4 key购买 nike

我正在用 Rust 编写项目来帮助我学习它,但是我在实现一个特征时遇到了问题,然后在将实现它的类型传递给函数时使用该特征所需的函数。

为了尝试缩小问题范围,我创建了一个 MVCE .这是错误消息和代码:

错误信息

error[E0277]: the trait bound `my_struct::MyStruct: my_trait::MyTrait` is not satisfied
--> src\main.rs:12:5
|
12 | invoke_print_i32(&MyStruct { });
| ^^^^^^^^^^^^^^^^ the trait `my_trait::MyTrait` is not implemented for `my_struct::MyStruct`
|
note: required by `invoke_print_i32`
--> src\main.rs:7:1
|
7 | fn invoke_print_i32<T: MyTrait>(instance: &T) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

my_trait.rs

pub trait MyTrait {
fn print_i32(&self, n: i32);
}

my_struct.rs

#[path = "my_trait.rs"]
mod my_trait;
use my_trait::MyTrait;

pub struct MyStruct { }

impl MyTrait for MyStruct {
fn print_i32(&self, n: i32) {
println!("n: {}", n);
}
}

ma​​in.rs

mod my_trait;
use my_trait::MyTrait;

mod my_struct;
use my_struct::MyStruct;

fn invoke_print_i32<T: MyTrait>(instance: &T) {
instance.print_i32(42);
}

fn main() {
invoke_print_i32(&MyStruct { });
}

我在研究这个问题时的尝试主要是发现人们试图实现相当标准的 Rust 特性,例如:

我还在某处读到我需要重新实现变量的特征,例如 &MyStruct,但我这样做的尝试并没有解决问题。

额外信息

  • rustc -V 输出 rustc 1.36.0 (a53f9df32 2019-07-03)
  • cargo -V 输出 cargo 1.36.0 (c4fcfb725 2019-05-15)
  • 平台/操作系统为 Windows 10 专业版 (x86_64)

问题

我做错了什么;我怎样才能正确实现特征?

最佳答案

你已经声明了模块 my_trait 两次,所以实际上有两个不同的特征叫做 MyTrait:crate::my_trait crate::my_struct::my_trait.

您不需要在my_struct 模块中声明该模块。相反,使用在 crate 根目录中声明的模块:

use crate::my_trait::MyTrait;

或者

use super::my_trait::MyTrait;

关于module - 错误[E0277] : the trait bound `my_struct::MyStruct: my_trait::MyTrait` is not satisfied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57639568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com