rust - "Importación no resuelta, tal vez una falta externa" Cuando existe una declaración externa
rust install dependencies (2)
Tengo un pequeño proyecto que se desarrolló sin problemas cuando todo estaba en un gran archivo .rs. Quería que fuera más fácil trabajar con él, así que lo dividí en módulos, y el proyecto ahora está estructurado así:
├── GameState
│ ├── ballstate.rs
│ ├── collidable.rs
│ ├── gamestate.rs
│ ├── mod.rs
│ └── playerstate.rs
├── lib.rs
└── main.rs
En ballstate.rs
, necesito usar la caja rand
. Aquí hay una versión abreviada del archivo:
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() };
}
}
Sin embargo, cuando ejecuto cargo build
desde el directorio de nivel superior, aparece el siguiente error:
GameState / ballstate.rs: 42: 9: 42:13 error: importación resuelta
rand::*
. Tal vez unextern crate rand
faltante?
Cuando acabo de tener la declaración de la caja externa en mi archivo main.rs, funcionó. ¿Qué ha cambiado ahora que está en un módulo separado?
Necesitas poner el extern crate rand;
línea en su main.rs
y / o lib.rs
No es necesario ponerlo en los otros archivos.
Quizás esté relacionado con este error .
Para citar del capítulo Cajas y Módulos del libro de Rust :
[...] las declaraciones de
use
son rutas absolutas, comenzando desde la raíz de su caja.self
hace ese camino relativo a su lugar actual en la jerarquía en su lugar.
El compilador es correcto; no hay nada como rand
, porque lo has puesto dentro de un módulo, por lo que la ruta correcta sería GameState::ballstate::rand
, o self::rand
desde el módulo GameState::ballstate
.
Necesitas mover el extern crate rand;
al módulo raíz o use self::rand
dentro del módulo GameState::ballstate
.