如何使用 main.rs 中其他模块中声明的结构?



这是情况。我有一个名为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.rslib.rs实际上是单独编译的不同板条箱,因此modlibmain中使用时为每个模块创建单独的模块。通常,您只想在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

最新更新