【问题标题】:Cannot implement trait for struct in module无法为模块中的结构实现特征
【发布时间】:2014-07-11 21:51:01
【问题描述】:

感谢您花时间阅读我的问题。我已经到处寻找我的问题的答案,包括 rust 文档,但无济于事。如果有人能告诉我发生了什么事,或者甚至为我指出正确的方向,那就太好了。


这就是问题所在。

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

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

【问题讨论】:

  • 公约说明:AStructATrait

标签: struct scope rust traits


【解决方案1】:

好吧,我也很新,但问题是您的主程序只能从::my_module::a_struct 看到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();
}

【讨论】:

    【解决方案2】:

    您需要使用use my_module::my_trait; 将特征纳入范围。此外,您还有很多不必要的可见性修饰符 (pub)。 Here's playpen 上的一个工作示例。

    【讨论】:

    • 谢谢,我添加了use my_module::my_trait; 行,现在一切正常。我添加了所有 pub 限定符以排除权限问题。
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多