2016-06-07 2 views
4

을 이해하지 못하고, 나는 E0508 ​​오류 얻을 :이 코드를 컴파일했을 때 나는 오류 E0508 ​​

cannot move out of type [Enum; 2] , a non-copy fixed-size array

enum Enum { 
    Val1 = 0, 
    Val2 = 1, 
} 

fn main() { 
    let a = [Enum::Val1, Enum::Val2]; 
    let x: i32 = a[0] as i32 + a[1] as i32; 
    println!("{}", x); 
} 

난 그냥 열거 형의 배열에서 하나의 값에 액세스 할을.

+1

Why downvote? 설명해주는 것이 좋습니다. – Boiethios

+3

나는 downvote을하지는 않았지만, 장기간의 사용자는 보복에 반대하고 화가 나는 OP를 경험했기 때문에 downvotes를 거의 설명하지 못했다. 대부분의 사람들은 XOR 코멘트를 downvote 생각합니다. – Shepmaster

+0

당신이'grid (i] [0] + grid [i] [2]/3)가 아닌'(grid [i] [0]) + grid [i] [1] + grid [ ] [1] + grid [i] [2])/3'? – kennytm

답변

4

작은 재생 :

enum Enum { 
    Val1 = 0, 
    Val2 = 1, 
} 

fn main() { 
    let a = [Enum::Val1]; 
    a[0] as i32; 
} 

가장 쉬운 수정이 열거 Copy를 만드는 것입니다 :

#[derive(Copy, Clone)] 
enum Enum { 
    Val1 = 0, 
    Val2 = 1, 
} 

where is the copy needed?

이 좋은 질문이고, 내가 왜 완전히 확실하지 않다 값을 정수로 강제 변환 할 때 값을 이동해야합니다. 그래도 배열과 관련하여 특별한 것은 없습니다 :

#[derive(Debug)] 
enum Enum { 
    Val1 = 0, 
    Val2 = 1, 
} 

fn main() { 
    let a = Enum::Val1; 
    let b = a as i32; 
    println!("{:?}", a); // Error: a was moved in the line above 
} 
+0

미니멀리스트 복제물을 가져 주셔서 감사합니다.하지만이 작업을 시도했지만 너무 많은 줄이있었습니다. 그리고 솔루션이 작동합니다. 그리드를 복사하지 않고 참조로 전달할 수 있습니까? – Boiethios

+0

@Boiethios * 그리드를 참조로 전달할 수 있습니다 * - 이미 그렇게하고 있습니다 :'& Grid' – Shepmaster

+1

복사본이 필요한 곳을 모르겠습니다. – Boiethios

관련 문제