gpt4 book ai didi

rust - 错误 E0433 - 从测试访问模块时使用了未声明的类型或模块

转载 作者:行者123 更新时间:2023-11-29 07:52:25 25 4
gpt4 key购买 nike

作为 Rust 的第一个项目,我正在尝试创建一个游程编码库。

这是我的 src/lib.rs(最初由 cargo 创建):

#[cfg(test)]

mod rle;
mod tests {

#[test]

fn it_works() {
let rle1 = rle::Rle {
lengths: vec![1, 4, 2],
values: vec![1, 2, 1],
};
}

}

这是我的src/rle.rs:

pub struct Rle {
lengths: Vec<i32>,
values: Vec<i32>,
}

使用这个布局,我得到一个错误[E0433]:解析失败。使用未声明的类型或模块“rle”

我已尝试遵循名为 Crates and Modules 的 Rust 文档中的指南。 .

我做错了什么?

如果布局不明显:

$ ls src
lib.rs rle.rs

最佳答案

您在使用#[cfg(test)]时出错。

Rust 有两种应用属性的方法:

  • #[...] 应用于下一项
  • #![...] 适用于封闭项

这意味着,#[cfg(test)] 正在应用于下一项 (mod rle;),因此它只会在测试模式下编译。另一方面,您的 tests 模块将始终被编译。

因此,当不在测试模式下运行时,您有:

  • 没有rle模块
  • tests 模块引用 rle 模块

修复很简单:移动属性,使其适用于 mod tests,而不是 mod rle


注意:

  • 正如 Chris 所提到的,您还需要使用 super::rle 来引用 rle 模块。
  • 如 ljedrz 所述,您还需要将 Rle 的字段声明为 public 以便能够从文件外部命名它们(如果测试在同一个文件中,您不应该遇到这个问题).

关于rust - 错误 E0433 - 从测试访问模块时使用了未声明的类型或模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39959956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com