2016-05-17 3 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.rsまたはmain.rsにそれを置くために、より慣用的な、より便利でもあります。それでは、あなたのuseのステートメントは、今のように動作します。この問題の

理由は、あなたがルートクレートのサブモジュールのいずれかにextern crate postgresを入れているということです。

mod submodule { 
    extern crate postgres; 

    use postgres::...; 
} 

これはpostgresモジュールへのフルパスがちょうどpostgres(覚えていない、submodule::postgresになることを意味し、 useディレクティブのパスはデフォルトで絶対パスであるため、use submodule::postgres::whatever;またはuse self::postgres::whatever;のいずれかを使用する必要があります(後者の形式はuseステートメントの相対パスの例です)。しかし、私が以前に言ったように、これは慣用的ではなく、避けるべきです。

+0

ここで注意すべき点の1つは、 'use'は' root'に相対的ですが、他のパスは 'self'に相対的です。これは新しい人にとって非常に混乱していることが分かります。 – WiSaGaN

関連する問題