You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:47:26