8

参考までに、Rust 0.7 を使用しています。

所有リンク リストを使用してスタック実装を作成しようとしていますが、問題が発生しています。

trait Stack<T> {
    fn push(&mut self, item : T);
    fn pop(&mut self) -> Option<T>;
}

enum Chain<T> {
    Link(T, ~Chain<T>),
    Break
}

impl<T> Stack<T> for ~Chain<T> {
    fn push(&mut self, item : T) {
        *self = ~Link(item, *self);
    }
    fn pop(&mut self) -> Option<T> {
        None
    }
}

しようとするrustc stack.rsと、次のエラーが表示されます。

stack.rs:13:28: 13:34 error: cannot move out of dereference of & pointer
stack.rs:13         *self = ~Link(item, *self);
                                        ^~~~~~

これをどのように克服できるか、またはこれを可能にするために別の方法で何ができるかわかりません。マネージ ポインターを使用せずにこのデータ構造を作成できるはずですが、この種のドキュメントはあまり見たことがありません。

4

1 に答える 1