导入模块时,struct的字段是私有的

jim*_*pez 14 rust

我试图将我的项目拆分成多个文件,但是我将问题导入到我的问题中,main.rs因为它说Column的字段是私有的,但我已将结构声明为public.

SRC/column.rs

pub struct Column {
    name: String,
    vec: Vec<i32>,
}
Run Code Online (Sandbox Code Playgroud)

SRC/main.rs

pub mod column;

fn main() {
    let col = column::Column{name:"a".to_string(), vec:vec![1;10]};
    println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)

货物建造

src/main.rs:4:15: 4:75 error: field `name` of struct `column::Column` is private
src/main.rs:4     let col = column::Column{name:"a".to_string(), vec:vec![1;10]};
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/main.rs:4:15: 4:75 error: field `vec` of struct `column::Column` is private
src/main.rs:4     let col = column::Column{name:"a".to_string(), vec:vec![1;10]};
Run Code Online (Sandbox Code Playgroud)

rco*_*rre 23

尝试将字段标记为公共字段:

pub struct Column {
    pub name: String,
    pub vec: Vec<i32>,
}
Run Code Online (Sandbox Code Playgroud)

标记Columnpub其他模块可以使用结构本身,但不一定是所有成员的标记.

  • 啊,好的。我认为使用 `pub struct` 会创建结构体的字段,因为这是我从书中得到的印象。 (3认同)

fjh*_*fjh 13

您已将结构声明为公共结构,但不是字段.要使两个字段都公开,struct声明应如下所示:

pub struct Column {
    pub name: String,
    pub vec: Vec<i32>,
}
Run Code Online (Sandbox Code Playgroud)