这是情况。我有一个名为project_name的项目,它具有以下文件层次结构:
project_name
|-- src
| |-- main.rs
| |-- lib.rs
| `-- tree_node.rs
我在 tree_node.rs 中声明了结构TreeNode。
pub struct TreeNode { ... }
lib.rs中有使用TreeNode的方法:
mod tree_node;
use tree_node::TreeNode;
pub struct Solution {}
impl Solution {
pub fn invert_tree(root: TreeNode) -> TreeNode { ... }
}
但是当我尝试在main.rs中使用方法invert_tree时,如下所示:
use project_name::Solution;
use tree_node::TreeNode;
mod tree_node;
fn main() {
let tree = TreeNode::new(1);
let result = Solution::invert_tree(tree);
}
我收到一个错误:
expected struct `project_name::tree_node::TreeNode`, found struct
`tree_node::TreeNode`
也许我使用了错误的术语方法,但我希望要点清楚。怎么了?
main.rs
和lib.rs
实际上是单独编译的不同板条箱,因此mod
在lib
和main
中使用时为每个模块创建单独的模块。通常,您只想在lib.rs
中使用mod
,除非某些模块仅供应用程序的私人使用。
因此,将main.rs
中的mod tree_node
替换为use project_name::tree_node::TreeNode;
。
在lib.rs
中,您必须将mod tree_node
更改为pub mod tree_node
,或者如果它仅适用于此板条箱而不是外部用户,则必须pub(crate) mod tree_node
。