Issue
There's a lot of Rust documentation about using modules, but I haven't found an example of a Cargo binary that has multiple modules, with one module using another. My example has three files inside the src folder. Modules a and b are at the same level. One is not a submodule of another.
main.rs:
mod a;
fn main() {
println!("Hello, world!");
a::a();
}
a.rs:
pub fn a() {
println!("A");
b::b();
}
and b.rs:
pub fn b() {
println!("B");
}
I've tried variations of use b and mod b inside a.rs, but I cannot get this code to compile. If I try to use use b, for example, I get the following error:
--> src/a.rs:1:5
|
1 | use b;
| ^ no `b` in the root. Did you mean to use `a`?
What's the right way to have Rust recognize that I want to use module b from module a inside a cargo app?
Solution
You'll have to include b.rs somewhere, typically with mod b;. If b is a child of a (instead of being a sibling of a), there are two ways to do this:
- Recommended: rename
a.rsintoa/mod.rsandb.rsintoa/b.rs. Then you canmod b;ina/mod.rs. - Instead, you can just
#[path = "b.rs"] mod b;ina.rswithout renaming sources.
If b is intended to be a sibling of a (instead of being a child of a), you can just mod b; in main.rs and then use crate::b; in a.rs.
Answered By - Masaki Hara Answer Checked By - Mildred Charles (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.