尝试用new()函数从其他文件初始化struct时出现编译错误
错误原因及解决方法:无法在模块
Alpha中找到new函数 核心错误原因
你的代码存在两个关键问题:
- 模块名大小写不匹配:Rust的模块声明与文件名严格区分大小写,你的文件名为
alpha.rs,但你在main.rs中写了mod Alpha;,这会导致Rust无法正确定位对应的模块文件。 - 路径访问错误:
new方法是定义在alpha模块内的Alpha结构体实现中,而非直接属于alpha模块本身,因此不能直接通过Alpha::new()(或修正后的alpha::new())调用。
修正后的代码示例
alpha.rs代码保持不变
pub struct Alpha { age: i32 } impl Alpha { pub fn new() -> Self { Alpha { age: 0 } } }
修正main.rs(两种可选方式)
方式1:使用完整路径调用
// 模块名与文件名一致,使用小写alpha mod alpha; fn main() { // 通过「模块名::结构体名::方法名」的完整路径调用 let alpha = alpha::Alpha::new(); }
方式2:通过use导入结构体简化调用
mod alpha; // 导入模块内的Alpha结构体,后续可直接使用 use alpha::Alpha; fn main() { let alpha = Alpha::new(); }
验证效果
修正后重新编译代码,E0425错误会消失,程序可正常初始化Alpha实例。
内容的提问来源于stack exchange,提问作者Song Bee
相关产品推荐
相关产品推荐

