2016-05-17 63 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