我是Rust的新手,我试图实现通用的二叉树 . 我使用this code作为枚举和impl的参考 .
这里, use List::*;
似乎是指下面的枚举 .
这是我的树木代码:
use BinaryTree::*;
enum BinaryTree<T> {
Empty,
Node(Box<(T, BinaryTree<T>, BinaryTree<T>)>),
}
impl<T: Ord> BinaryTree<T> {
fn add(&mut self, value: T) {
match *self {
BinaryTree::Empty => {
*self = BinaryTree::Node(Box::new((value, BinaryTree::Empty, BinaryTree::Empty)))
}
BinaryTree::Node(ref mut node) => {
if value <= node.0 {
node.1.add(value);
} else {
node.2.add(value);
}
}
}
}
fn height(&self) -> i32 {
match *self {
BinaryTree::Empty => -1i32,
BinaryTree::Node(ref node) => 1i32 + maxi(node.1.height(), node.2.height()),
}
}
fn size(&self) -> i32 {
match *self {
BinaryTree::Empty => 0i32,
BinaryTree::Node(ref node) => 1i32 + node.1.size() + node.2.size(),
}
}
}
fn maxi(x: i32, y: i32) -> i32 {
if x > y {
x
} else {
y
}
}
然后货物退出并出现此错误:
error: unresolved import `BinaryTree::*`. Maybe a missing `extern crate BinaryTree`? [E0432]
use BinaryTree::*;
^~~~~~~~~~
根据我在链表的例子中所理解的,rustc应该理解 use BinaryTree::*;
是我在下面定义的枚举 . 这可以帮助将所有 BinaryTree::Empty
更改为 Empty
和 BinaryTree::Node(...)
更改为 Node(...)
.
编辑:
由于我想开发一个库并使用多个文件,我在src / trees.rs中工作
在main.rs,我只有(现在)
mod trees;
fn main() {}
1 回答
感谢Shepmaster的评论,我发现了这个问题 .
使用
use
时,路径必须是绝对的将
use BinaryTree::*;
更改为use trees::BinaryTree::*;
可以解决问题 .这个问题解决了 .