構造体に別の型への参照であるメンバ変数を与えるのに問題があります。ここに私の構造体および実装は次のとおりです。ベクトル内の要素への参照
struct Player<'a> {
current_cell: &'a Cell,
}
impl<'a> Player<'a> {
pub fn new(starting_cell: &'a Cell) -> Player<'a> {
Player { current_cell: starting_cell }
}
}
プレイヤーは、彼らがしている現在のCell
への参照を持ってここに私のGame
構造体とその実装されています。
struct Game {
is_running: bool,
cells: Vec<Cell>,
}
impl Game {
pub fn new() -> Game {
let cells = construct_cells();
let player = Player::new(cells[0]);
Game {
is_running: false,
cells: cells,
}
}
}
cells
がCell
のベクトルでありますs。ゲームを作成すると、construct_cells()
にセルのベクトルを作成し、最初のセルでプレイヤーを開始します。私は取得していますエラーは次のとおりです。
expected &Cell, found struct `Cell`
私はPlayer
を作成するとき、私は参照を渡していないよいることがわかりますが、私は&cells[0]
にパラメータを変更した場合、それは全体のベクトルを借りるために私に叫ぶと、私はGame
構造体を作成するときに再びそれを使用しようとしています。どうしたの?プレーヤーにCell
への参照を与えるにはどうすればよいですか?
リファレンス(またはポインタ)が何であるか、特にダングリングリファレンス*(またはポインタ)は何ですか?もしあなたがあなたの住所(123 Main St.)を持っている友人に一枚の紙を送ってから**あなたが**移ったなら、どうなるでしょうか?あなたの友人がちょうど現れて、あなたのように住んでいた家の人々と話し始めると、家の新しいオーナーはどのように感じますか? – Shepmaster
@Shepmaster私はぶら下がっているポインタが何であるか知っています。私はこの解決策が1つを可能にすることを理解できなかったと思う。同じ結果を得るにはどうすればいいですか?私は何をしようとしていますか? – Dooskington
*私は、この解決策が1つを可能にすることを理解していませんでした。 - それがRustがすばらしい言語であるIMOです。ローカル変数から 'Cell'を' Game'構造体に移動すると、 'player'に与えたようなベクトルへの参照を無効にしました。 CやC++のような言語はAFAIKを実行させ、実行時にコードをクラッシュさせます。 'player'は決して使われないので、あなたが本当にやりたいことを言うのは難しいです。 – Shepmaster