2016-05-17 89 views
0

货物我有这样的:板条箱出口,但 “使用” 抛出编译错误

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

你把'extern crate postgres;'放在'lib.rs'或'main.rs'中了吗? –

回答

3

虽然可以把extern crate指令给任何一个模块,它既是更地道,并把它放到你的箱子,通常lib.rsmain.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;(后一种形式是use语句中的相对路径示例)。然而,正如我之前所说,这不是惯用的,应该避免。

+0

这里的一个注意事项是'use'与'root'相对,而另一个路径与'self'有关。这被证明对新来者非常困惑。 – WiSaGaN