2016-06-27 11 views
0

私はRustにはかなり新しく、一般的なバイナリツリーを実装しようとしました。 enumとimplのリファレンスとしてthis codeを使用しました。一般的なenumとimpl、useを使用できない

ここで、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::EmptyEmptyBinaryTree::Node(...)からNode(...)に変更するのに役立ちます。

編集:main.rsで

私は図書館をdeveloppし、複数のファイルを使用したいので、私はSRC/trees.rsで働く

、私は(今のところ)だけ持って

mod trees; 

fn main() {} 
+1

コード提示さ(https://play.rust-lang.org/?gist=2231a51461b58d0c6cea11aa9166db08&version=stable&backtrace=0)[正常にコンパイル]、及びEmpty' 'にすべての' BinaryTree :: Empty'を変えるも機能。問題の内容を明確にすることはできますか? – Shepmaster

+0

'maxi'は[標準ライブラリ](http://doc.rust-lang.org/std/cmp/fn.max.html)に組み込まれた関数です – Shepmaster

+0

あなたのコードはおそらくルートにはありませんが、モジュールで?この場合、これは[this](http://stackoverflow.com/q/33948293/155423)、[this](http://stackoverflow.com/q/31035491/155423)または[this] (http://stackoverflow.com/q/26224947/155423)? – Shepmaster

答えて

0

Shepmasterのコメントのおかげで、私は問題を発見しました。 use trees::BinaryTree::*;からuse BinaryTree::*;は、問題を解決変更use

を使用した場合

パスは絶対パスでなければなりません。

この問題は解決されました。

関連する問題