尝试使用 new() 函数从另一个文件初始化结构时出现编译错误

问题描述 投票:0回答:2

当我尝试初始化一个名为

Alpha
的结构时出现错误,该结构是在另一个文件中定义和实现的。

alpha.rs

pub struct Alpha {
    age: i32
}

impl Alpha {
    pub fn new() -> Self {
        Alpha { age: 0 }
    }
}

main.rs

mod Alpha;

fn main() {
    let alpha = Alpha::new();
}

但是当我尝试编译代码时出现以下错误。

error[E0425]: cannot find function `new` in module `Alpha`
  --> src/main.rs:81:24
   |
81 |     let alpha = Alpha::new();
   |                        ^^^ not found in `Alpha`

对错误有什么想法吗?

我已将结构及其实现放入

main.rs
并且它有效,但不需要将它们放在一起。

rust rust-cargo
2个回答
0
投票

Alpha
是模块。它包含
Alpha
结构体,该结构体具有
new()
函数。所以,
Alpha::Alpha::new()

此外,在 Rust 中,我们用

snake_case
命名模块。如果您这样做并将
mod Alpha;
更改为
mod alpha;
,您也可以在顶部
use alpha::Alpha;
然后引用不合格的
Alpha::new()


0
投票

在 Rust Lang 中,按照惯例,模块名称应以小写或蛇形字母开头。

在 main.rs 中,导入模块时应使用小写名称,如下所示:

mod alpha; // Use lowercase

fn main() {
    let alpha = alpha::Alpha::new();
}

这是推荐的目录结构:

project/
├── src/
│   ├── main.rs
│   └── alpha.rs // or a directory named "alpha" with alpha.rs inside
© www.soinside.com 2019 - 2024. All rights reserved.