无法在模块中实现struct的trait

时间:2014-07-11 21:51:02

标签: struct scope rust traits

感谢您抽出宝贵时间阅读我的问题。我一直在寻找我的问题的答案,包括生锈文档无济于事。如果有人能告诉我发生了什么,或者甚至指出我的方向很好。


所以这就是问题所在。

我有一个模块。在该模块内部,我有一个结构和一个特征。我想在结构上为该特性编写一个实现。但是在执行此操作后,我无法调用实现中定义的函数,我不断收到以下错误。

错误:输入`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();
}

2 个答案:

答案 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有关围栏的实例。