【问题标题】:How do I resolve the error "no module in the root" when using a module in Rust 2018?在 Rust 2018 中使用模块时,如何解决错误“根目录中没有模块”?
【发布时间】:2025-12-17 01:00:01
【问题描述】:

我正在开发一个项目,该项目使用src/ 下文件夹中的一些本地模块。我目前正在使用 Rust 2018 版,其中一项主要更改是 handling of imports/use statements

我的模块代码一切正常,但是当我开始将它组合起来用于整个项目时,我开始收到此错误:

error[E0432]: unresolved import `crate::lexer`
 --> src/main.rs:1:5
  |
1 | use crate::lexer;
  |     ^^^^^^^^^^^^ no `lexer` in the root

目前,我的代码是这样设置的:

src/
 | main.rs
 | lexer/
    | mod.rs
    | lexer.rs

lexer/lexer.rs

pub fn lex_stuff() -> Vec<String> { vec![String::new("test")] }

lexer/mod.rs

pub mod lexer;

ma​​in.rs

use crate::lexer;

fn main() {
    println!("Hello, world!");
    lexer::lexer::lex_stuff();
}

我试图通过将语句更改为use lexer 以及use self::lexer 并添加extern crate lexer 来解决此问题(这显然不起作用,但见鬼,我想我会尝试一下)。然而,这些都没有奏效。

如何解决no 'lexer' in the root 错误?

【问题讨论】:

    标签: module rust rust-2018


    【解决方案1】:

    仍然需要声明 main.rs 包含一个模块:

    mod lexer; // This, not `use`    
    
    fn main() {
        println!("Hello, world!");
        lexer::lexer::lex_stuff();
    }
    

    请花时间重新阅读The Rust Programming Language,特别是关于Separating Modules into Different Files的部分。

    【讨论】:

    • 我最终明白了这一点,还没有时间回来创建一个解释这一点的答案。我误解了上一个答案中发布的链接,并认为已替换为use crate::...
    【解决方案2】:

    您需要将mod.rs 移动到lexer.rs

    src/
     | main.rs
     | lexer.rs
     | lexer/
        | lexer.rs
        | tokens.rs
    

    此更改描述为here

    【讨论】:

    • 我这样做了,保持lexer.rs(以前的lexer/mod.rs)的内容相同,但我仍然遇到同样的错误。