Rust中StructOpt定义在独立文件时无法找到参数解析器的问题
问题根因
你的报错核心是src/opt.rs中导入StructOpt的路径写法错误,self::前缀限制了编译器只能在当前opt模块内查找structopt依赖,无法正确定位到项目依赖的structopt库及其内部的clap组件,后续编译器给出的导入建议属于旧版Rust的提示误导,没有实际参考价值。
修复步骤
- 移除所有冗余的
extern crate声明:Rust 2018及以上版本(你使用的1.56已经满足)无需手动声明外部依赖,extern crate语句可以全部删除。 - 修正
src/opt.rs的导入路径,同时如果需要在库外部访问Opt的字段,将字段也声明为pub。
修复后各文件代码
src/opt.rs
use structopt::StructOpt; #[derive(StructOpt, Debug)] #[structopt(name = "basic")] pub struct Opt { /// Activate debug mode #[structopt(short, long)] pub debug: bool, }
src/main.rs
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;
验证
修改完成后执行cargo run -- --debug,即可正常输出解析后的参数结构。
内容的提问来源于stack exchange,提问作者womble
相关产品推荐
相关产品推荐

