gpt4 book ai didi

module - 在单独的文件中定义特征

转载 作者:行者123 更新时间:2023-12-03 11:24:22 25 4
gpt4 key购买 nike

我定义了两个结构

pub struct Rect {
pub width: f32,
pub length: f32
}

//and

pub struct Circle {
pub radius: f32
}

然后我定义一个特征 Area我为这两个 Circle 实现了这个特征和 Rect .当我将所有源代码放在一个 main.rs 中时,一切正常文件。
现在我想整理我的源代码。特别想创建一个文件夹 /src/geometry , 创建三个 rs该文件夹下的文件:
// /src/geometry/rect.rs
pub struct Rect {
pub width: f32,
pub length: f32
}
// /src/geometry/circle.rs
pub struct Circle {
pub radius: f32
}

// /src/geometry/traits.rs
pub trait Area {
fn area(&self) -> f32;
}
最后我想使用 main.rs 中的这些结构。 .
我花了几天时间,阅读了我在互联网上找到的所有示例,但我仍然无法让它工作。有什么建议么?
更新 :
项目结构:
src
geometry
rect.rs
circle.rs
traits.rs
geometry.rs
main.rs
// rect.rs

pub struct Rect {
pub width: f32,
pub length: f32
}

impl Area for Rect {
fn area(&self) -> f32 {
self.width * self.length
}
}

impl Perimeter for Rect {
fn perimeter(&self) -> f32 {
2.0*(self.width + self.length)
}
}
// circle.rs

pub struct Circle {
pub radius: f32
}

impl Area for Circle {
fn area(&self) -> f32 {
3.14*self.radius*self.radius
}
}

impl Perimeter for Circle {
fn perimeter(&self) -> f32 {
2.0*3.14*self.radius
}
}
// traits.rs

pub trait Perimeter {
fn perimeter(&self) -> f32;
}

pub trait Area {
fn area(&self) -> f32;
}
// geometry.rs
pub mod rect;
pub mod circle;
// main.rs

mod geometry;
use geometry::rect::Rect;
use geometry::circle::Circle;

fn main() {
let rect = Rect{ width: 1.0, length: 2.0 };
let circle = Circle{ radius: 2.3 };

println!("{}", rect.area());
println!("{}", circle.area());
}
编译器错误消息
error[E0405]: cannot find trait `Area` in this scope
--> src/geometry/rect.rs:6:6
|
6 | impl Area for Rect {
| ^^^^ not found in this scope

error[E0405]: cannot find trait `Perimeter` in this scope
--> src/geometry/rect.rs:12:6
|
12 | impl Perimeter for Rect {
| ^^^^^^^^^ not found in this scope

error[E0405]: cannot find trait `Area` in this scope
--> src/geometry/circle.rs:5:6
|
5 | impl Area for Circle {
| ^^^^ not found in this scope

error[E0405]: cannot find trait `Perimeter` in this scope
--> src/geometry/circle.rs:11:6
|
11 | impl Perimeter for Circle {
| ^^^^^^^^^ not found in this scope

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0405`.
error: could not compile `chapter10`.

最佳答案

首先,在 circle.rsrect.rs您需要添加 use crate::geometry::traits::{Area, Perimeter}; : 这会处理您粘贴的错误。
然后,在 main.rs您需要 use geometry::traits::Area;否则无法调用.area()方法。为此,您需要制作 traits geometry.rs 中的公共(public)模块: pub mod traits; (或至少在箱子内公开:pub(crate) mod traits;)。
就个人而言,我也会重命名 geometry.rsgeometry/mod.rs .

关于module - 在单独的文件中定义特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62965609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com