2015-08-15 97 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