我正在阅读Rust Book,在7.2章中,但是我必须缺少一些东西,因为我无法在模块中组织代码,因此编译器(rustc 1.32.0)总是给我错误。 / p>
rustc --explain E0433
,这是编译器的建议,但我仍然无法解决。my/mod.rs
在其自己的文件夹中使用模块my/nested.rs
)use
的使用,这在本书中还没有。这是一个最小的示例,试图模仿这本书的“声音”示例,只有两个文件:/src/main.rs
和/src/m.rs
。
main.rs
mod m;
fn main() {
let st_0 = m::St::new();
}
m.rs
pub mod m {
pub struct St {
a:i32,
b:i32,
}
impl St {
pub fn new() -> St{
println!("New St!");
St {
a: 12,
b: 13,
}
}
}
}
这就是cargo
告诉我的:
Compiling min v0.1.0 (/home/user/min)
error[E0433]: failed to resolve: could not find `St` in `m`
--> src/main.rs:3:19
|
3 | let st_0 = m::St::new();
| ^^ could not find `St` in `m`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0433`.
error: Could not compile `min`.
To learn more, run the command again with --verbose.
答案 0 :(得分:1)
将所有内容保存在一个文件中时,如下所示:
main.rs
pub mod m {
pub struct St {
a:i32,
b:i32,
}
impl St {
pub fn new() -> St{
println!("New St!");
St {
a: 12,
b: 13,
}
}
}
}
mod m;
fn main() {
let st_0 = m::St::new();
}
您用
包装模块pub mod mode_name {
//code...
}
将模块放在另一个文件中后,包装就会消失。 The Rust book进行了显示,但是如果您看起来不太仔细,或者如果您编程时喝醉了,则可能会与嵌套模块的pub mod instrument {...}
混淆。
所以先生必须看起来像这样:
pub struct St {
a:i32,
b:i32,
}
impl St {
pub fn new() -> St{
println!("New St!");
St {
a: 12,
b: 13,
}
}
}