Как инициализировать структуру с массивом фиксированного размера в качестве элемента-члена? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующая структура

struct Sudoku {
    field: [[u32; 9]; 9]
}

Если я инициализирую ее так, как это let su: Sudoku; все выглядит хорошо, но использование метода структуры дает мне эту ошибку ^^ use of possibly uninitialized 'method'.Поэтому я пытаюсь инициализировать структуру с помощью массива, подобного этому let su: Sudoku{field: [[u32; 9]; 9]};, который дает мне эту ошибку

98 |     let su: Sudoku{field: [[u32; 9]; 9]};
   |                   ^ expected one of 7 possible tokens here

Так что у меня в голове два вопросительных знака.Во-первых, как обычно использовать массивы фиксированного размера в структурах и правильно их инициализировать.И зачем мне в любом случае инициализировать массивы фиксированного размера, не для ли они примитивов, автоматически обнуляемых в памяти?

1 Ответ

3 голосов
/ 10 июля 2019

При инициализации переменной с помощью структуры вы должны использовать знак равенства, как и при любом другом присваивании.

Итак, прежде всего, мы должны добавить знак равенства.Существует два варианта размещения:

// A
let su: Sudoku = { field: [[u32; 9]; 9] };
// B
let su = Sudoku { field: [[u32; 9]; 9] };

Оба будут по-прежнему давать ошибку, но по разным причинам.

// A
error[E0425]: cannot find value `field` in this scope
 --> src/main.rs:7:24
  |
7 |     let su: Sudoku = { field: [[u32; 9]; 9] };
  |                        ^^^^^
  |                        |
  |                        not found in this scope
  |                        expecting a type here because of type ascription

error[E0308]: mismatched types
 --> src/main.rs:7:24
  |
7 |     let su: Sudoku = { field: [[u32; 9]; 9] };
  |                        ^^^^^^^^^^^^^^^^^^^^ expected struct `Sudoku`, found array of 9 elements
  |
  = note: expected type `Sudoku`
             found type `[[u32; 9]; 9]`

// B
error[E0423]: expected value, found builtin type `u32`
 --> src/main.rs:7:32
  |
7 |     let su = Sudoku { field: [[u32; 9]; 9] };
  |                                ^^^ not a value

Если вы знаете синтаксис Rust, вы знаете, что { ... } допустим как блоксинтаксис практически в любой ситуации.Единственное исключение - при инициализации структуры, в этом случае открывающей скобке должен предшествовать тип структуры.

Итак, B более корректно.Давайте исправим последнюю ошибку, которая говорит вам заменить тип значением, чтобы он работал.

let su = Sudoku { field: [[0; 9]; 9] };

Вы можете использовать любое значение там, каждый элемент в многомерном массиве будетзаполнено им.

( Детская площадка )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...