2015-08-15 101 views
4

我有3个文件:lib.rs,file2.rs和file3.rs。我lib.rs我有这个:无法声明模块“无法在此位置声明新模块”

mod file2; 
use file2::Struct2; 

它运作良好。然而,在文件3做同样的事情用一个错误编译:

mod file2; 
use file2::Struct2; 

=> error: cannot declare a new module at this location 

如果我删除国防部file2声明我得到这个:

error: unresolved import `Struct2` 

这有什么错呢?

回答

7

我不知道为什么你确切地得到这个错误,但这不会做你想做的。模块形成一个树形结构,并使用mod声明来形成它们。所以你正试图在file3之内创建另一个file2 mod。

我猜你想要file2和file3都在主模块下,而不是对方的子模块。要做到这一点,把

mod file2; 
mod file3; 

在lib.rs,然后在file3.rs

use file2::Struct2; 

,它应该所有的工作。我在手机上,所以我不能三重检查自己,抱歉格式化。

+0

工作。是“lib.rs”的特殊之处,因为它允许在其中使用“mod”? – imatahi

+1

不,它只是树的根。也被称为'板条根'。请参阅本书的“箱子和模块”一章进行阐述。 –

+0

这就是我所说的“它是否特别?”作为树的根,意味着是的。 – imatahi