snippetrustCritical
How can I implement Rust's Copy trait?
Viewed 0 times
howrustcancopyimplementtrait
Problem
I am trying to initialise an array of structs in Rust:
When I try to compile, the compiler complains that the
How can the
enum Direction {
North,
East,
South,
West,
}
struct RoadPoint {
direction: Direction,
index: i32,
}
// Initialise the array, but failed.
let data = [RoadPoint { direction: Direction::East, index: 1 }; 4];When I try to compile, the compiler complains that the
Copy trait is not implemented:error[E0277]: the trait bound main::RoadPoint: std::marker::Copy is not satisfied
--> src/main.rs:15:16
|
15 | let data = [RoadPoint { direction: Direction::East, index: 1 }; 4];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait std::marker::Copy is not implemented for main::RoadPoint
|
= note: the Copy trait is required because the repeated element will be copied
How can the
Copy trait be implemented?Solution
You don't have to implement
Note that every type that implements
Copy yourself; the compiler can derive it for you:#[derive(Copy, Clone)]
enum Direction {
North,
East,
South,
West,
}
#[derive(Copy, Clone)]
struct RoadPoint {
direction: Direction,
index: i32,
}Note that every type that implements
Copy must also implement Clone. Clone can also be derived.Code Snippets
#[derive(Copy, Clone)]
enum Direction {
North,
East,
South,
West,
}
#[derive(Copy, Clone)]
struct RoadPoint {
direction: Direction,
index: i32,
}Context
Stack Overflow Q#35458562, score: 127
Revisions (0)
No revisions yet.