我正在尝试编写一个名为 bar
的箱子,其结构如下所示
src/
├── bar.rs
└── lib.rs
我的src/lib.rs
看起来像这样
#![crate_type = "lib"]
#![crate_name = "bar"]
#![feature(ip_addr)]
#[allow(dead_code)]
pub mod bar;
我的bar.rs
有
pub struct baz {
// stuff
}
impl baz {
// stuff
}
现在,当我尝试在另一个 crate 中使用这个 crate 时,例如:
extern crate bar;
use bar::baz;
fn main() {
let cidr = baz::new("Hi");
println!("{}", cidr.say());
}
失败并显示
error: unresolved import `bar::baz`. There is no `baz` in `bar`
我需要在其他地方声明该模块吗?
最佳答案
您缺少的重要部分是 crate 定义了自己的模块。也就是说,您的箱子 bar
隐式定义了一个名为 bar
的模块,但您还在其中创建了一个名为 bar
的模块嗯>。您的结构驻留在这个嵌套模块中。
如果您将 main 更改为 use bar::bar::baz;
您可以超越此。您必须决定这是否是您想要的结构。大多数惯用的 Rust 项目不会有额外的 mod
并将其展平:
src/lib.rs
pub struct Baz {
// stuff
}
impl Baz {
// stuff
}
不幸的是,您的示例代码无法编译,因为您的结构定义无效,并且您调用了不存在的方法(new
),所以我无法告诉您还需要什么编译。
此外,结构应为 PascalCase
。
关于rust - 无法从另一个 crate 导入模块 - Unresolved 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995257/