感谢您抽出宝贵时间阅读我的问题。我一直在寻找我的问题的答案,包括生锈文档无济于事。如果有人能告诉我发生了什么,或者甚至指出我的方向很好。
所以这就是问题所在。
我有一个模块。在该模块内部,我有一个结构和一个特征。我想在结构上为该特性编写一个实现。但是在执行此操作后,我无法调用实现中定义的函数,我不断收到以下错误。
错误:输入`my_module :: a_struct`没有在名为`sound`的范围内实现任何方法
以下是生成此错误的代码。
非常感谢您对此问题的任何见解。
mod my_module {
pub struct a_struct;
pub trait a_trait {
pub fn sound(&self);
}
pub impl a_trait for a_struct {
pub fn sound(&self) {
println!("a sound");
}
}
}
fn main() {
let a_struct = ::my_module::a_struct;
a_struct.sound();
}
答案 0 :(得分:3)
我也很新,但问题是你的主程序只能从a_struct
看到::my_module::a_struct
,而且看不到你导出的a_trails
。
你必须做类似的事情。
use my_module::a_trait;
mod my_module {
pub struct a_struct;
pub trait a_trait {
fn sound(&self);
}
impl a_trait for a_struct {
fn sound(&self) {
println!("a sound");
}
}
}
fn main() {
let my_struct = ::my_module::a_struct;
my_struct.sound();
}
答案 1 :(得分:2)
您需要使用use my_module::my_trait;
将特征纳入范围。此外,您还有许多不必要的可见性修饰符(pub
)。 Here's有关围栏的实例。