2016-07-20 2 views
1

私は単純なNode構造体を2つのポインタで構築しようとしていますが、コンパイラは私が移動したという文句を言います。エラーを理解していますが、問題を回避する方法はわかりません。あなたに可変Optionの内容を借りる必要が部分的に移動された値の使用: `* head`

error: use of partially moved value: `*head` [E0382] 
    head.add_right('N'); 
    ^~~~ 
help: run `rustc --explain E0382` to see a detailed explanation 
note: `head.left` moved here because it has type `std::option::Option<Box<Node>>`, which is non-copyable 
    head.left.unwrap() .add_left('A'); 
+0

ここ
head.left.as_mut().unwrap().add_left('A'); 

playpen 'unwrap'の署名です。 – Shepmaster

答えて

1

以下、Option::as_mut() documentationを参照してください

#[derive(Debug)] 
struct Node { 
    val: char, 
    left: Option<Box<Node>>, 
    right: Option<Box<Node>>, 
} 

impl Node { 
    fn new(c: char) -> Box<Node> { 
     let new_node = Node { 
      val: c, 
      left: None, 
      right: None, 
     }; 
     println!("new Node {}", c); 
     return Box::new(new_node); 
    } 
    pub fn add_left(&mut self, c: char) { 
     let n_node = Node::new(c); 
     let target = &mut self.left; 
     *target = Some(n_node); 
    } 
    pub fn add_right(&mut self, c: char) { 
     let n_node = Node::new(c); 
     let target = &mut self.right; 
     *target = Some(n_node); 
    } 
} 

fn main() { 
    println!("Hello, world!"); 
    let mut head = Node::new('M'); 
    head.add_left('C'); 
    head.left.unwrap().add_left('A'); 
    head.add_right('N'); 
} 

例外。実は、私はあなたが読んで理解http://stackoverflow.com/a/34279224/155423をして見ればあなたの全体の問題が解決されると信じている作業バージョン

+0

それはとてもシンプルだった..奇妙な..私は完全にそれを逃した..ありがとう – rthota50

関連する問題