Rust 编译位字段的联合时获取E0658
尝试在Rust中使用联合和位字段,对于位字段,我使用的是Rust 编译位字段的联合时获取E0658,rust,unions,bit-fields,low-level,Rust,Unions,Bit Fields,Low Level,尝试在Rust中使用联合和位字段,对于位字段,我使用的是位字段板条箱,但我一直在查找联合使用的示例,但找不到任何示例,现在我遇到了一个错误 解决此错误的正确方法是为Image2D/`3D类型创建副本构造函数吗?如果是,怎么做 error[E0658]: unions with non-`Copy` fields are unstable --> src\main.rs:48:1 | 48 | / union Image { 49 | | image3D: Image3D,
位字段
板条箱,但我一直在查找联合使用的示例,但找不到任何示例,现在我遇到了一个错误
解决此错误的正确方法是为Image2D
/`3D类型创建副本构造函数吗?如果是,怎么做
error[E0658]: unions with non-`Copy` fields are unstable
--> src\main.rs:48:1
|
48 | / union Image {
49 | | image3D: Image3D,
50 | | image2D: Image2D,
51 | | }
| |_^
|
= note: see issue #55149 <https://github.com/rust-lang/rust/issues/55149> for more information
error: aborting due to previous error
根据Michael的回答:
只需将副本和克隆导出到结构的成员中,即可解决此问题:
#[derive(Copy,Clone)]
struct Image2D(u32);
bitfield_bitrange!{struct Image2D(u32)}
impl Image2D{
bitfield_fields!{
u32;
valid, _: 0;
width, _: 15, 1;
heigth, _: 29, 16;
image_type, _:31,30;
}
}
您没有给我们提供足够的代码来确定,但我怀疑将
#[派生(复制,克隆)]
添加到您的Image2D
和Image3D
结构中就足够了。您不清楚错误消息的哪一部分?问题是,当我添加副本时,我试图将其添加到Image类中,因此它仍然会抱怨,如果我将其添加到2d或3d,仍然需要克隆,但正如Michael指出的,应该是2d和3d图像结构的复制和克隆!这解决了问题!谢谢
#[derive(Copy,Clone)]
struct Image2D(u32);
bitfield_bitrange!{struct Image2D(u32)}
impl Image2D{
bitfield_fields!{
u32;
valid, _: 0;
width, _: 15, 1;
heigth, _: 29, 16;
image_type, _:31,30;
}
}