包括一个内部模块会产生“也许缺少板条箱'module2'”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包括一个内部模块会产生“也许缺少板条箱'module2'”相关的知识,希望对你有一定的参考价值。
我具有以下项目结构:
src
├── module1
│ └── mod.rs
├── main.rs
└── module2
└── mod.rs
但我得到一个
error[E0432]: unresolved import `crate::module2`
--> src/module2/mod.rs:6:14
|
6 | use crate::module2::SomeStruct;
| ^^^^^^^ maybe a missing crate `module2`?
当文件内容如下时。
src / module1 / mod.rs
pub mod module1 {
// -- snip --
use crate::module2::SomeStruct;
}
// -- snip --
}
src / module2 / mod.rs
pub mod module2 {
// --snip--
pub struct SomeStruct;
}
// -- snip--
}
src / main.rs
mod module1;
fn main() {
// -- snip--
}
为什么会这样,如何解决?所有相关的模块和结构都是公开的。 A relevant chapter in the Rust Book。
答案
模块的声明(例如pub mod module1
)发生在该模块之外。模块声明有two kinds个:其中一个声明位于紧随其后(在大括号内),另一个声明位于另一个文件中。
对于单独文件中的模块,您只需要说pub mod module1;
在该模块的父目录中。对于您的结构,您需要在pub mod module1;
中包含pub mod module2
和main.rs
。
在模块文件中(例如src/module1/mod.rs
),您根本不需要pub mod module1
。您可以直接将其项目保存在文件中。
因此您的设置应该是
src/main.rs
pub mod module1;
pub mod module2;
src/module1/mod.rs
// -- snip --
use crate::module2::SomeStruct;
// -- snip
src/module2/mod.rs
// --snip--
pub struct SomeStruct;
// -- snip--
以上是关于包括一个内部模块会产生“也许缺少板条箱'module2'”的主要内容,如果未能解决你的问题,请参考以下文章