Rust 无法声明模块";无法在此位置声明新模块";

Rust 无法声明模块";无法在此位置声明新模块";,rust,Rust,我有3个文件:lib.rs、file2.rs和file3.rs。I lib.rs我有这个: mod file2; use file2::Struct2; 而且效果很好。但是,在文件3中执行相同的操作会编译一个错误: mod file2; use file2::Struct2; => error: cannot declare a new module at this location 如果我删除modfile2声明,我会得到: error: unresolved import `St

我有3个文件:lib.rs、file2.rs和file3.rs。I lib.rs我有这个:

mod file2;
use file2::Struct2;
而且效果很好。但是,在文件3中执行相同的操作会编译一个错误:

mod file2;
use file2::Struct2;

=> error: cannot declare a new module at this location
如果我删除mod
file2
声明,我会得到:

error: unresolved import `Struct2`

这有什么问题吗?

我不知道为什么会出现这样的错误,但这并不是你想要的。模块形成一个树结构,您可以使用mod声明来形成它们。因此,您正在尝试在file3模块内创建另一个file2模块

我猜您希望file2和file3都位于主模块之下,而不是彼此的子模块之下。要做到这一点,请将

mod file2;
mod file3;
在lib.rs中,然后在file3.rs中

use file2::Struct2;

这一切都应该奏效。我在移动电话上,所以我无法对自己进行三重检查,很抱歉格式化。

不,这只是树的根。也被称为“板条箱根”。请参阅本书的“板条箱和模块”章节进行详细说明。这并不特别,因为它是mod唯一可以去的地方。他们可以进入这些文件中的任何一个。@imatahi,请阅读官方书籍中的,它应该会给你一些答案
mod
声明可以出现在任何模块中;它们只需正确使用即可。@ker,因此,由于创建定义在另一个文件中的模块的mod声明只能在lib.rs中创建,因此我们可以从这个意义上说“lib.rs是一个特殊文件”,不是吗?正如实际的错误消息所说,这也不是真的“可以通过
foo/mod.rs
”将此模块
foo
移动到自己的目录中。该模块的定义也在另一个文件中。