2015-01-27 8 views
7

Próbuję zwrócić wartości wektora z następującym kodem i. Otrzymuję komunikat o błędzie.Otrzymywanie błędu "błąd: cecha` core :: marker :: Sized` nie jest zaimplementowana "podczas próby zwrócenia wartości z wektora

fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] { 
    let mut merged: Vec<i32> = Vec::new(); 
    // push elements to merged 
    *merged 
} 

test.rs:19:52: 19:57 error: the trait core::marker::Sized is not implemented for the type [i32] test.rs:19 fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] {

I nie mogę dla życia mnie dowiedzieć się, jak naprawić ten

Odpowiedz

10

Kompilator jest informacją, że niemożliwe jest, aby powrócić do [T].

rdza należące wektory (Vec<T>) plasterków (&[T]) i macierze o stałym rozmiarze ([T; n] gdzie n jest nieujemną liczbę całkowitą, jak 6).

Plasterek składa się ze wskaźnika do danych i długości. Oto, jakie są twoje wartości left i right. Jednak to, co jest określone w plasterku, to nie jest to, który ostatecznie jest właścicielem danych. Plasterki po prostu wypożyczają dane z czegoś innego. Możesz traktować & jako sygnał, że dane są pożyczane.

A Vec to jedna rzecz, która jest właścicielem danych i pozwala innym rzeczy pożyczać je za pomocą plasterka. Aby rozwiązać problem, musisz przydzielić trochę pamięci do przechowywania wartości, a Vec robi to za ciebie. Możesz następnie zwrócić cały numer Vec, przekazując własność dzwoniącemu.

Określony komunikat o błędzie oznacza, że ​​kompilator nie wie, ile miejsca należy przydzielić dla typu [i32], ponieważ nigdy nie było przeznaczone do bezpośredniego przydzielania. Ten błąd dotyczy innych rzeczy w Rust, zazwyczaj gdy próbujesz usunąć obiekt z cechy cechy, ale to wyraźnie różni się od przypadku tutaj.

Oto najbardziej prawdopodobne naprawić chcesz:

fn merge(left: &[i32], right: &[i32]) -> Vec<i32> { 
    let mut merged = Vec::new(); 
    // push elements to merged 
    merged 
} 

Dodatkowo, nie trzeba określać wcieleń tutaj, i usunąłem zbędne typ adnotacji na zgłoszeniu merged.

Powiązane problemy