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

Rust如何跨文件正确导入模块?解决模块未找到报错问题

修复Rust模块引用错误的方法

问题原因

在Rust中,mod default;的作用是声明当前模块的子模块,而非引入已有的同级模块。你在main.rs中写mod default;有效,是因为main.rs是crate的根文件,它会自动加载同目录下的default.rs作为根模块的子模块。但在difficult.rs中写mod default;时,Rust会尝试在difficult.rs的同级目录(或子目录)寻找default.rs,找不到就会报错。

修复步骤

1. 在根文件中声明所有同级模块

在main.rs中同时声明default和difficult模块,让Rust将这两个文件都识别为crate的根级子模块:

// main.rs
mod default;
mod difficult;

fn main() {
    let _info = default::Info;
    default::f();
}

2. 在difficult.rs中正确引用default模块的内容

不需要再写mod default;,而是通过以下两种方式访问:

  • 方式一:使用绝对路径(从crate根开始)
// difficult.rs
pub fn use_default() {
    let _info = crate::default::Info;
    crate::default::f();
}
  • 方式二:用use语句导入简化代码
// difficult.rs
use crate::default::{Info, f};

pub fn use_default() {
    let _info = Info;
    f();
}

补充说明

Rust的模块遵循单一根入口规则:所有同级模块都需要在crate根文件(main.rs或lib.rs)中声明,其他模块想要跨模块访问内容,必须通过crate::开头的绝对路径,或者通过use语句导入目标内容。

内容的提问来源于stack exchange,提问作者dubugger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:45:41