file - 无法将文件导入 Rust 中的另一个文件

标签 file import rust

C++ 老手尝试我在 Rust 中的第一步。我有一个包含 3 个文件的小项目:

ma​​in.rs

mod person;
use person::*;

fn main() {
    let mut pp = Person::new(); // Person struct used here
    pp.name = "Malcolm".to_string();
    println!("{}, {}, {}",
        pp.name, pp.place.street, pp.place.number);
}

person.rs

mod addr;
use addr::*;

pub struct Person {
    pub name: String,
    pub place: addr::Addr // Addr struct used here
}

impl Person {
    pub fn new() -> Self {
        Self {
            name: "John".to_string(),
            place: addr::Addr::new()
        }
    }
}

addr.rs

pub struct Addr { // won't use any other struct
    pub street: String,
    pub number: i32
}

impl Addr {
    pub fn new() -> Self {
        Self {
            street: "Boulevard".to_string(),
            number: 33
        }
    }
}

但是,在尝试编译时,我收到此错误消息:

error[E0583]: file not found for module `addr`
--> src/person.rs:1:5
|
1 | mod addr;
|     ^^^^
|
= help: name the file either person/addr.rs or person/addr/mod.rs inside the directory "src"

我真的搞不懂哪里出了问题,到底是怎么回事?

最佳答案

另一个选项是 use crate将文件保存在同一目录中的路径。如果您最终想在其他模块中重用 Addr 而无需耦合到 person,这可能会很方便。在您的示例中,请尝试以下操作。

  1. main.rs 中,添加 mod addr; 使 addr 模块对根目录可见。
  2. person.rs 中,更改:
mod addr;
use addr::*;

到:

use crate::addr;

关于file - 无法将文件导入 Rust 中的另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58034305/

相关文章:

c - 根据文件大小分配内存的数量不正确?

Python 无缘无故地停止写入文件

c - 如何在Linux内核中打开并读取 `struct inode *`处的文件

file - 如何格式化 CSV 文件中的数据,以便可以轻松地将其导入到 R 中?

c - 在uint8_t指针中添加int到底有什么作用?

rust - 有没有办法强制打印!/println!使用 Windows 换行 (CR LF)

python - IO错误: [Errno 2] No such file or directory Python

javascript - fontloader 和 textgeometry 在 threejs 中不起作用

java - 如何为我自己的项目正确导入 commons.apache.math 库

rust - 引用相同/包含结构中的字段