首页 文章

通用枚举和impl,无法使用

提问于
浏览
0

我是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 更改为 EmptyBinaryTree::Node(...) 更改为 Node(...) .

编辑:

由于我想开发一个库并使用多个文件,我在src / trees.rs中工作

在main.rs,我只有(现在)

mod trees;

fn main() {}

1 回答

  • 0

    感谢Shepmaster的评论,我发现了这个问题 .

    使用 use 时,路径必须是绝对的

    use BinaryTree::*; 更改为 use trees::BinaryTree::*; 可以解决问题 .

    这个问题解决了 .

相关问题