C++ 老手正在尝试 Rust 的第一步。我有一个包含 3 个文件的小项目:
主程序.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);
}
Run Code Online (Sandbox Code Playgroud)
人.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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
地址.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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当尝试编译时,我收到以下错误消息:
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"
Run Code Online (Sandbox Code Playgroud)
我实在搞不明白到底出了什么问题,到底是什么?
cod*_*key -1
从错误消息来看,您的 addr.rs 文件似乎位于错误的位置(src/addr.rs?)。以下项目布局可行:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 person\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 addr.rs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 person.rs\nRun Code Online (Sandbox Code Playgroud)\n\n正如:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 person\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 addr\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mod.rs <== this is addr.rs renamed\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 person.rs\nRun Code Online (Sandbox Code Playgroud)\n\n模块是分层的,并从 crate 根部形成一棵树,或者src/main.rs或src/lib.rs。
板条箱根可以引用在另一个文件中声明的模块,例如
\n\nmod module1\nRun Code Online (Sandbox Code Playgroud)\n\n然后它期望找到一个名为src/module1.rs或 的文件src/module1/mod.rs。
但如果module1引用另一个模块 ,module2则预计它位于src/module1/module2.rs或 中src/module1/module2/mod.rs,嵌套在 下module1。
请参阅Rust Book 中的将模块分离到不同的文件中。
\n\n为了main.rs也使用Addr,person.rs需要将addr模块声明为 public:
pub mod addr;\nRun Code Online (Sandbox Code Playgroud)\n\n然后main.rs可以像这样引用它:
let myAddr = person::addr::Addr::new();\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\nuse person::addr;\n// ...\nlet myAddr = addr::Addr::new();\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4112 次 |
| 最近记录: |