在货物中我有这个:
postgres = "0.11.7"
在子模块中* .rs
extern crate postgres;
use postgres::{Connection, Error, FromSql, SslMode};
use postgres::Result as PgResult;
编译错误:
error: unresolved import `postgres::Connection`. Did you mean `self::postgres`? [E0432]
unresolved import `postgres::Error`. Did you mean `self::postgres`? [E0432]
error: unresolved import `postgres::SslMode`. Did you mean `self::postgres`? [E0432]
和类似的那些。
答案 0 :(得分:3)
虽然可以将extern crate
指令放到任何模块中,但将它放在 crate root 上通常是lib.rs
或{更加惯用且更方便{1}}。然后,您的main.rs
语句将按原样运行。
出现此问题的原因是您已将use
放入根条箱的子模块之一:
extern crate postgres
这意味着mod submodule {
extern crate postgres;
use postgres::...;
}
模块的完整路径为postgres
,而不仅仅是submodule::postgres
(请记住,postgres
指令中的路径默认为绝对路径),所以你应使用use
或use submodule::postgres::whatever;
(后一种形式是use self::postgres::whatever;
语句中相对路径的示例)。但是,正如我之前所说,这不是惯用的,应该避免。