我的目录结构:
src
main.rs
image.rs
decoders.rs
当我尝试将我的解码器模块导入image.rs时,我得到了:
error[E0583]: File not found for module `decoders`
decoders.rs:
pub mod Decoders {}
image.rs:
mod decoders
use decoders::Decoders
pub mod Image {}
注意:我使用的模块是有意包装整个文件的模块,因此我可以将属性放在整个文件上。这就是为什么它不是How to include module from another file from the same project?
的副本的原因奇怪的是,当我尝试在main.rs中导入Image时,此语法工作得很好:
mod image;
use image::Image;
答案 0 :(得分:0)
正在发生的事情是,当您尝试在decoders::Decoders
中导入image.rs
时,您需要进行下一个升级,因为使用了以下方法:
mod decoders
use decoders::Decoders
意味着decoders
现在将是“拥有的”或在image
下,这是不可能的,因为仅 lib.rs
,mod.rs
或{{ 1}}文件可以在其他文件中包含模块。因此,要解决此问题,您可以将文件结构更改为此:
main.rs
或者,在src
main.rs
image
mod.rs
decoder.rs
中使用它:
main.rs
以及mod decoders;
mod image;
中的内容:
image.rs
此外,要解决嵌套mod问题,请在use super::decoders::Decoders;
//Or alternatively
use crate::decoders::Decoders;
中执行以下操作:
decoders.rs
以及以下//Your code, no `mod Decoders`
语句所在的位置:
mod decoders
答案 1 :(得分:-2)
rust编译器根据定义模块的方式来解析模块。
当您使用mod
关键字从板条箱入口点(通常为main.rs
或lib.rs
)或模块根目录(mod.rs
)声明外部模块时,编译器将搜索与声明文件相邻的文件。这就是为什么在mod image.rs
文件中使用main.rs
时它可以正常工作的原因。
在其他情况下,编译器将在文件夹中搜索与声明文件同名的文件。就您而言,这意味着mod decoders;
中的image.rs
行会导致编译器在image
子文件夹中搜索模块-特别是检查image/decoders.rs
和image/decoders/mod.rs
要解决此问题,可以将decoders.rs
保留为image/decoders.rs
的子模块,也可以将decoders
移至image
,或者放置mod decoders;
main.rs
中,然后将文件保留在原处。