Rust Monorepo编译报‘private struct’错误,但结构体及路径均为public
为什么Cargo会提示私有结构体?
以下是几种常见的排查方向:
- 字段访问误触发整体报错:如果结构体本身是
pub,但你在Crate A里直接访问了它的私有字段,Cargo的错误提示可能简化成“private struct”,实际问题是字段不可访问,而非结构体本身。 - 父模块可见性缺失:检查Crate B中结构体所在的所有父模块是否都标记了
pub。比如结构体在devices::core::MyStruct,那core模块必须是pub mod core;,否则上层模块的私有性会阻断结构体的外部访问路径。 - 根模块未导出结构体:即使结构体和父模块都是pub,若没在Crate B的
lib.rs里通过pub use把结构体导出到根模块,Crate A也无法直接通过devices::MyStruct访问,得写完整路径,或者确认导入路径是否匹配实际导出层级。 - Cargo缓存或路径问题:执行
cargo clean清除缓存后重新编译,同时确认Crate A的Cargo.toml里的path是否正确指向Crate B的目录,避免依赖解析异常。 - 结构体的pub限定范围错误:检查结构体定义是否是
pub struct,而非pub(crate)(仅当前crate可见)或其他限定范围的pub。
内容的提问来源于stack exchange,提问作者Treagzhao
相关产品推荐
相关产品推荐

