2015-03-20 23 views
6

Próbuję podzielić mój projekt na wiele plików, ale mam problemy z zaimportowaniem ich do mojego main.rs, ponieważ jest napisane, że pola kolumny są prywatne, ale deklaruję strukturę jako publiczną.Pole struct jest prywatne podczas importowania modułu

src/column.rs

pub struct Column { 
    name: String, 
    vec: Vec<i32>, 
} 

src/main.rs

pub mod column; 

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

budować ładunek

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]}; 

Odpowiedz

15

Spróbuj oznakowanie pola jako publiczne:

pub struct Column { 
    pub name: String, 
    pub vec: Vec<i32>, 
} 

Oznakowania Column jak pub oznacza, że ​​inne moduły mogą używać struct się, ale niekoniecznie wszyscy jego członkowie.

+1

Ahhh, ok. Przyjąłem, że użycie 'pub struct' spowodowałoby, że pola struct były takie, jakie wywarłem z książki. – jimjampez

10

pan ogłosił struct jako publiczne, ale nie na polach . Aby oba pola publiczna deklaracja struktura powinna wyglądać następująco:

pub struct Column { 
    pub name: String, 
    pub vec: Vec<i32>, 
} 
Powiązane problemy