rust - 在 rust 中访问 mod 内部的结构

标签 rust

如何修复给出此代码示例的编译错误?

pub mod media {
    pub struct AudioDevice {
        rec_id: i16,
        play_id: i16,
    }

    pub fn audio_device() -> AudioDevice {
        AudioDevice {
            rec_id: -1,
            play_id: -1,
        }
    }
}

struct Card {
    record_id: i16,
    play_id: i16,
}

fn card() -> Card {
    Card {
        record_id: 1,
        play_id: 1,
    }
}

fn main() {
    use media::*;
    let _sample: AudioDevice = crate::media::audio_device();
    let _card = card();
    println!("record_id: {}, play_id: {}", _card.record_id, _card.play_id);
    println!(
        "map rec_id: {}, play_id: {} ",
        _sample.play_id, _sample.rec_id
    );
}

error[E0616]: field `play_id` of struct `media::AudioDevice` is private
  --> src/main.rs:34:9
   |
34 |         _sample.play_id, _sample.rec_id
   |         ^^^^^^^^^^^^^^^

error[E0616]: field `rec_id` of struct `media::AudioDevice` is private
  --> src/main.rs:34:26
   |
34 |         _sample.play_id, _sample.rec_id
   |                          ^^^^^^^^^^^^^^

最佳答案

AudioDevice 是一个公共(public)结构,但它的成员字段默认是私有(private)的。

println!("record_id: {}, play_id: {}", _card.record_id, _card.play_id);
                                             ^    

您正在从结构外部访问私有(private)字段。

您可以通过多种方式解决此问题。一种方法是公开字段:
pub struct AudioDevice {
    pub rec_id: i16,
    pub play_id: i16,
}

关于rust - 在 rust 中访问 mod 内部的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983963/

相关文章:

rust - Actix-Web 中如何获取 IP 地址进行限速?

assembly - 发布与 Debug模式下局部堆栈变量的代码生成

rust - 如何解决外部 crate 中未使用的括号警告?

Rust 无法返回引用 HashMap get 上的局部变量的值

tcp - 如何确定我是否需要来自 Rust io::Error 的新 TCP 连接?

build - 链接大型库时是否可以加快 Rust 编译?

embedded - 未知的 BlueNRG SPI 响应

rust - 火箭整流罩、tokio-scheduler 和 cron 的生命周期问题

unit-testing - serde 实现中的模拟实例

rust - 从 Box<T> 切换到 Rc<T> 以获取类似 Scheme 的缺点列表不会编译