箱子出口但是"使用"抛出编译错误

时间:2016-05-17 16:43:03

标签: rust rust-cargo

在货物中我有这个:

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]

和类似的那些。

1 个答案:

答案 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指令中的路径默认为绝对路径),所以你应使用useuse submodule::postgres::whatever;(后一种形式是use self::postgres::whatever;语句中相对路径的示例)。但是,正如我之前所说,这不是惯用的,应该避免。