【问题标题】:Accessing stuct inside mod in rust在 rust 中访问 mod 内部的结构
【发布时间】:2020-04-02 03:50:27
【问题描述】:

如何解决给出此代码示例的编译错误?

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
   |                          ^^^^^^^^^^^^^^

【问题讨论】:

  • 堆栈溢出不太适合新手问题,我鼓励你在其他资源上问这种问题很多东西都建议在 rust 标签的Getting Help 部分。

标签: rust


【解决方案1】:

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

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

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

您可以通过多种方式解决此问题。一种方法是公开字段:

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

【讨论】:

  • 它工作正常,当我阅读 rust 编程书籍时,这个单独的成员结构可以不被覆盖。非常感谢@Gardener 先生。
猜你喜欢
  • 2010-12-20
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多