参考のために、私は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);
^~~~~~
私はこれを克服することができる方法や、私がこれを許可するように異なって何ができるかわかりません。管理されたポインタを使用せずにこのデータ構造を作成できるはずですが、私はこのようなことについて多くのドキュメントを見ていません。
'(、休憩を自己)尾=のstd :: utilの::置き換えてみましょうあなたは受け入れ答えのような'チェーン '上の形質を実装する必要がありますが、あなたのようなものを使用して、あなたのアイデアを保持することができます。 std :: util :: replace(self、Link(item、〜tail)); '' replace'と 'swap'関数は所有しているデータ構造を扱う際に重要なツールです。 –
u0b34a0f6ae