如何在Rust中正确导入结构体?Filme结构体new方法调用报错排查
问题解决步骤
错误原因分析
你遇到的error[E0425]: 无法在模块Filme中找到函数new``,核心原因是模块访问路径错误:new函数属于Filme模块内的Filme结构体的实现,而非直接属于Filme模块本身。另外代码里还存在一个隐藏问题:你调用了print_categorias()方法,但结构体的实现中并没有定义这个方法。
修正方案
方案1:调整访问路径并补充缺失方法
修改main.rs的代码以正确访问结构体的new函数,同时在Filme.rs中添加print_categorias方法:
修改后的Filme.rs
pub struct Filme{ pub nome: String, pub duracao: u8, pub categorias : String, } impl Filme{ pub fn new(nome:String, duracao:u8, categorias: String) -> Filme{ Filme { nome, duracao, categorias, } } // 添加缺失的print_categorias方法 pub fn print_categorias(&self) -> &str { &self.categorias } }
修改后的main.rs
pub mod Filme; fn main() { // 正确路径:模块名::结构体名::方法名 let filme = Filme::Filme::new("Vingadores".to_string(),90,"Ação e Aventura".to_string()); println!("{}", filme.print_categorias()); }
方案2:使用use语句简化访问(更推荐)
通过use将结构体导入当前作用域,这样可以直接使用Filme::new:
pub mod Filme; // 导入模块内的Filme结构体 use Filme::Filme; fn main() { let filme = Filme::new("Vingadores".to_string(),90,"Ação e Aventura".to_string()); println!("{}", filme.print_categorias()); }
额外规范建议
Rust的命名惯例中,模块文件名推荐使用蛇形小写命名(比如filme.rs而非Filme.rs),对应的模块声明改为mod filme;,这样更符合社区规范,避免混淆。
内容的提问来源于stack exchange,提问作者Loizm
相关产品推荐
相关产品推荐

