0

我开始使用 Rust 中的命令行工具,并从一开始就碰壁。StructOpt我可以使用if Optstruct is defined in解析命令行参数main.rs,但由于我希望能够将Optstruct 传递到库代码中,所以我在它自己的文件中定义它,以便库的其他部分知道它是什么所有关于。

这是倾销错误最少的代码版本,尽管我承认它在很大程度上是通过尝试编译器建议的东西和一些随机的 SO 建议拼凑而成的,所以它可能是完全错误的。

我得到的构建错误是:

$ cargo run
   Compiling basic v0.1.0 (/home/mpalmer/src/action-validator/blobble)
error[E0433]: failed to resolve: maybe a missing crate `structopt`?
 --> src/opt.rs:8:5
  |
8 |     /// Activate debug mode
  |     ^^^^^^^^^^^^^^^^^^^^^^^ not found in `structopt::clap`
  |
help: consider importing this struct
  |
3 | use opt::structopt::clap::Arg;
  |

For more information about this error, try `rustc --explain E0433`.
error: could not compile `basic` due to previous error
$ cargo --version
cargo 1.56.0 (4ed5d137b 2021-10-04)
$ rustc --version
rustc 1.56.0 (09c42c458 2021-10-18)

(是的,我已经尝试添加use opt::structopt::clap::Arg;,以防万一,但错误并没有消失,我收到有关未使用导入的警告 - 同时仍被告知尝试添加use未使用的相同内容,这很有趣)

Cargo.toml

[package]
name = "basic"
version = "0.1.0"
authors = ["User"]

[dependencies]
structopt = "0.3"

src/main.rs

extern crate basic;
extern crate structopt;

use basic::Opt;
use structopt::StructOpt;

fn main() {
    let opt = Opt::from_args();
    println!("{:#?}", opt)
}

src/lib.rs

mod opt;

pub use crate::opt::Opt;

src/opt.ts

extern crate structopt;

use self::structopt::StructOpt;

#[derive(StructOpt, Debug)]
#[structopt(name = "basic")]
pub struct Opt {
    /// Activate debug mode
    #[structopt(short,long)]
    debug: bool,
}

建议感激不尽。

4

1 回答 1

1

工作版本是

货运.toml

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

[dependencies]
structopt = "0.3"

库文件

#[macro_use] extern crate structopt;
use structopt::StructOpt;

pub mod opt;

opt.rs

#[derive(StructOpt, Debug)]
#[structopt(name = "basic")]
pub struct Opt {
    /// Activate debug mode
    #[structopt(short,long)]
    debug: bool,
}

main.rs

#[macro_use] extern crate structopt;
use structopt::StructOpt;

fn main() {
    let opt = basic::opt::Opt::from_args();
    println!("{:#?}", opt);
}

您需要声明use structopt::StructOpt,因为 from_args 特征必须在范围内。

于 2021-10-26T08:37:41.687 回答