Ho un piccolo progetto che è stato creato senza problemi quando era tutto in un unico grande file .rs. Ho voluto rendere più facile lavorare con, così ho rotto in su in moduli, e il progetto è ora strutturato in questo modo:"importazione non risolta - forse un extern mancante" Quando esiste la dichiarazione extern
├── GameState
│ ├── ballstate.rs
│ ├── collidable.rs
│ ├── gamestate.rs
│ ├── mod.rs
│ └── playerstate.rs
├── lib.rs
└── main.rs
In ballstate.rs
, ho bisogno di usare il rand
cassa. Ecco una versione abbreviata del file:
extern crate rand;
pub struct BallState {
dir: Point,
frame: BoundingBox
}
impl BallState {
fn update_dir(&mut self) {
use rand::*;
let mut rng = rand::thread_rng();
self.dir.x = if rng.gen() { Direction::Forwards.as_float() } else { Direction::Backwards.as_float() };
self.dir.y = if rng.gen() { Direction::Forwards.as_float() } else { Direction::Backwards.as_float() };
}
}
Tuttavia, quando corro cargo build
dalla directory di livello superiore, ottengo il seguente errore:
GameState/ballstate.rs:42:9: 42:13 error: unresolved import
rand::*
. Maybe a missingextern crate rand
?
Quando ho appena avuto la dichiarazione di cassa extern nel mio file main.rs, questo ha funzionato. Cosa è cambiato ora che è in un modulo separato?
Questa è la risposta che ho ricevuto poche ore fa; grazie per aver postato (e per aver indicato dove è stato detto in quel libro/tutorial, in realtà l'ho letto prima di postare la domanda e non ho capito che aveva la soluzione per tutto il tempo). Non volevo insinuare che il compilatore avesse torto, solo che non capivo esattamente cosa fosse cambiato dallo scenario di un file ai molti. –