在Rust中解决导入问题

3

我在从 crates.io 导入rand包上遇到了问题。在项目中添加了 rand="0.8.3" 这一行后,执行 cargo build 命令时,一直显示相同的错误:

error[E0432]: unresolved import `rand`
 --> main.rs:1:5
  |
1 | use rand::Rng;
  |     ^^^^ maybe a missing crate `rand`?

error[E0433]: failed to resolve: use of undeclared crate or module `rand`
 --> main.rs:4:25
  |
4 |     let secret_number = rand::thread_rng().gen_range(1..=11);
  |                         ^^^^ use of undeclared crate or module `rand`

error: aborting due to 2 previous errors

cargo.toml 文件

[package]
name = "roller"
version = "0.1.0"
authors = ["User"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.3"

基本上最简单的可重现示例是这一行代码:

 use rand::Rng;

 fn main(){
    let secret_number = rand::thread_rng().gen_range(1..=11);
    print!("{}",secret_number);
 }

它出了什么问题?



# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"

[[package]]
name = "getrandom"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
dependencies = [
 "cfg-if",
 "libc",
 "wasi",
]

[[package]]
name = "libc"
version = "0.2.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"

[[package]]
name = "ppv-lite86"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"

[[package]]
name = "rand"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
dependencies = [
 "libc",
 "rand_chacha",
 "rand_core",
 "rand_hc",
]

[[package]]
name = "rand_chacha"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
dependencies = [
 "ppv-lite86",
 "rand_core",
]

[[package]]
name = "rand_core"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
dependencies = [
 "getrandom",
]

[[package]]
name = "rand_hc"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
dependencies = [
 "rand_core",
]

[[package]]
name = "roller"
version = "0.1.0"
dependencies = [
 "rand",
]

[[package]]
name = "wasi"
version = "0.10.2+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"

你能提供一个最小化、可复现的示例吗?接下来要说的是,对于 rand 0.8.3.gen_range 的函数签名已经改变了。现在它需要一个范围,例如 .gen_range(0..=42) - Jason
谢谢您指出签名更改,尽管我没有在代码中反映它。 - Nantarand
@SergioTulentsev 噢,我以为在这种情况下主函数的存在是隐含的,但我会添加它。 - Nantarand
2
@Nantarand:嗯,是的,这通常是默认的,但考虑到您似乎在导入包时遇到了问题,最好将您的main.rs完整地发布出来。我们都不知道,您是否只尝试使用这一行编译该文件。这是我们额外的澄清,也是浪费时间。 - Sergio Tulentsev
1
你使用的 Rust 编译器版本是哪个?rustc --version 还是 cargo --version。隐式 crate 导入(作为 2018 版本的一部分)仅在 1.31.0 及以上版本中可用。 - E net4
显示剩余8条评论
4个回答

5

1

在使用vs code(rust-analyzer)运行时,我遇到了相同的错误。

当您按下运行按钮rustic main.rs时,终端会调用此命令,这将导致错误。

请在终端中键入以下内容:

cargo build
cargo run

它运行良好


-1
如果您认为已经做了一切正确的事情,但出现了无法导入的奇怪错误,那么您可以尝试运行 cargo clean
这将允许您在此之后完全重新构建您的二进制文件/库。

-1
我对Rust还不熟悉。在阅读Rust Lang书籍教程时,我遇到了同样的问题。我在cargo.toml文件中添加了rand = "0.8.5"这一行,但我不明白为什么它仍然无法编译通过。
问题是我把这一行添加到了顶部的部分,而它应该在dependencies部分。
[dependencies]
rand = "0.8.5"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接