質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

解決済

構造体内部に文字列の配列を保持するための、ライフタイム指定方法が知りたい

sutonea
sutonea

総合スコア199

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

1回答

0リアクション

0クリップ

325閲覧

投稿2022/05/07 02:52

実現したいこと

構造体内部に保持した Vector<str> へ要素を追加するためのメソッドを作成したいです。
ライフタイムに関するエラーを解消する方法と、考え方をご教示いただきたく、よろしくお願いいたします。

  1. Memo というクラスを作成しました
  2. インスタンス変数に lines として 文字列の配列を定義しました(実装は Vector )
  3. lines に文字列を追加するための add メソッドを定義しました

クラス図

発生しているエラーメッセージ

error[E0261]: use of undeclared lifetime name `'a` --> src/main.rs:15:11 | 15 | impl Memo<'a> { | - ^^ undeclared lifetime | | | help: consider introducing lifetime `'a` here: `<'a>`

該当のソースコード

rust

fn main() { let mut text = Memo::new(); text.add("name, category") .add("Apple, Fruit") .add("Beef, Meet") .add("Banana, Fruit"); println!("{:?}", text.data); } struct Memo<'a> { data: Vec<&'a str>, } impl Memo<'a> { fn new() -> Memo<'static> { Memo { data: vec![], } } fn add<'a>(&mut self, line: &'a str) -> &mut Memo { self.data.push(line); self } }

Cargo.toml

[package] name = "docfood" version = "0.1.0" edition = "2021"

試したこととエラーメッセージ

impl Memo からライフタイムの指定を除外してみました。

error[E0726]: implicit elided lifetime not allowed here --> src/main.rs:15:6 | 15 | impl Memo { | ^^^^- help: indicate the anonymous lifetime: `<'_>` | = note: assuming a `'static` lifetime...

impl Memo<'_> としてみました。

error[E0312]: lifetime of reference outlives lifetime of borrowed content... --> src/main.rs:23:25 | 23 | self.lines.push(line); | ^^^^ | note: ...the reference is valid for the lifetime `'_` as defined here... --> src/main.rs:15:11 | 15 | impl Memo<'_> { | ^^ note: ...but the borrowed content is only valid for the lifetime `'a` as defined here --> src/main.rs:22:12 | 22 | fn add<'a>(&mut self, line: &'a str) -> &mut Memo { | ^^

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。