rust - 无法从另一个 crate 导入模块 - Unresolved 导入

标签 rust

我正在尝试编写一个名为 bar 的箱子,其结构如下所示

src/
├── bar.rs
└── lib.rs

我的src/lib.rs看起来像这样

#![crate_type = "lib"]
#![crate_name = "bar"]
#![feature(ip_addr)]
#[allow(dead_code)]
pub mod bar;

我的bar.rs

pub struct baz {
  // stuff
}

impl baz {
  // stuff
}

现在,当我尝试在另一个 crate 中使用这个 crate 时,例如:

extern crate bar;

use bar::baz;

fn main() {
    let cidr = baz::new("Hi");
    println!("{}", cidr.say());
}

失败并显示

error: unresolved import `bar::baz`. There is no `baz` in `bar`

我需要在其他地方声明该模块吗?

最佳答案

您缺少的重要部分是 crate 定义了自己的模块。也就是说,您的箱子 bar 隐式定义了一个名为 bar 的模块,但您还在其中创建了一个名为 bar 的模块嗯>。您的结构驻留在这个嵌套模块中。

如果您将 main 更改为 use bar::bar::baz; 您可以超越此。您必须决定这是否是您想要的结构。大多数惯用的 Rust 项目不会有额外的 mod 并将其展平:

src/lib.rs

pub struct Baz {
    // stuff
}

impl Baz {
    // stuff
}

不幸的是,您的示例代码无法编译,因为您的结构定义无效,并且您调用了不存在的方法(new),所以我无法告诉您还需要什么编译。

此外,结构应为 PascalCase

关于rust - 无法从另一个 crate 导入模块 - Unresolved 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995257/

相关文章:

concurrency - 如果创建可变变量和可变引用并在单独的线程中更改其中之一,Rust 中会发生什么?

rust - 为什么不能在同一结构中存储值和对该值的引用?

rust - 如何阅读基于 Tokio 的 Hyper 请求的整个主体?

rust - 如何阻塞直到两个接收器之一有可用数据?

返回通用特征的 Rust 函数

rust - 在 catch_unwind 期间将回溯转换为字符串

rust - 为什么要尝试!()和?在不返回选项或结果的函数中使用时无法编译?

mongodb - Rust Actix Web 是否支持 MongoDB?

reference - 将两个对象(其中一个对象持有对另一个对象的引用)传递到线程中

lifetime - 嵌套生命周期