在编译位域的Rust并集时获取E0658

问题描述

尝试在Rust中使用联合和位域,对于位域,我使用的是bitfield板条箱,但是我一直在寻找将其与联合使用的示例,但找不到任何东西,现在我遇到了一个错误。

解决此错误的正确方法是为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

这是2D点的实现:

extern crate bitfield;
use bitfield::*;

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;
    }
}
impl std::fmt::Debug for Image2D {
    bitfield_debug!{
       struct Image2D;
       valid,30;
    }
}

解决方法

每位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;
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...