Rust Error E0603: Accessing Private Items
Understanding Rust Error E0603
Rust error E0603 occurs when a private item is used outside its scope. An item is private by default, and can only be accessed within the module it is defined in. To use it elsewhere, you need to explicitly make it public.
Here's an example of code that generates error E0603:
#![allow(unused)]
fn main() {
mod foo {
const PRIVATE: u32 = 0x_a_bad_1dea_u32;
}
println!("const value: {}", foo::PRIVATE);
}
Fixing the Error
To fix Rust error E0603, make the item public by adding the 'pub' keyword before the item's declaration:
#![allow(unused)]
fn main() {
mod foo {
pub const PRIVATE: u32 = 0x_a_bad_1dea_u32;
}
println!("const value: {}", foo::PRIVATE);
}
Understanding Scopes and Privacy in Rust
In Rust, the scope and privacy of items are determined by modules and the 'pub' keyword. By default, items are private and only accessible within the module they are defined in. To allow access to items outside the module, use the 'pub' keyword.
Expanding on the Example
Let's see another example of Rust error E0603. Suppose we have a private struct 'Person' with a private field 'name'. Accessing 'name' outside the module will result in error E0603:
mod humans {
pub struct Person {
name: String,
}
pub fn create_person(name: String) -> Person {
Person { name }
}
}
fn main() {
let someone = humans::create_person(String::from("John"));
println!("Name: {}", someone.name); // error: field `name` of
// struct `Person` is private
}
To fix the error, add 'pub' before the field 'name'. Now the field can be accessed outside the module:
mod humans {
pub struct Person {
pub name: String,
}
pub fn create_person(name: String) -> Person {
Person { name }
}
}
fn main() {
let someone = humans::create_person(String::from("John"));
println!("Name: {}", someone.name); // ok!
}