代码之家  ›  专栏  ›  技术社区  ›  Ulysses

无法访问结构字段(Rust)

  •  0
  • Ulysses  · 技术社区  · 2 年前

    我试图访问结构的不同字段,但出现以下错误:

    error[E0609]: no field `x` on type `Point`
     --> src/lib.rs:9:31
      |
    8 |     fn distance<Point>(point1: &Point, point2: &Point) -> f64 {
      |                 ----- type parameter 'Point' declared here
    9 |         let diffX = (*point1).x - (*point2).x;
      |                               ^
    

    对于x、y和z:

    pub struct Point {
        pub x: f64,
        pub y: f64,
        pub z: f64,
    }
    
    impl Point {
        fn distance<Point>(point1: &Point, point2: &Point) -> f64 {
            let diffX = (*point1).x - (*point2).x;
            let diffY = (*point1).y - (*point2).y;
            let diffZ = (*point1).z - (*point2).z;
            (diffX * diffX + diffY * diffY + diffZ * diffZ).sqrt()
        }
    }
    

    我做错了什么?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Steve Lau    2 年前
    error[E0609]: no field `x` on type `Point`
     --> src/lib.rs:9:31
      |
    8 |     fn distance<Point>(point1: &Point, point2: &Point) -> f64 {
      |                 ----- type parameter 'Point' declared here
    9 |         let diffX = (*point1).x - (*point2).x;
      |                               ^
    

    错误消息显示 Point 是一个 type parameter 在第8行中声明,该行与原始 指向 之前声明的类型。

    所以解决方案是将这个泛型类型更改为另一个名称,或者删除它,因为我在函数体中找不到它的任何用法。

    pub struct Point {
        pub x: f64,
        pub y: f64,
        pub z: f64,
    }
    
    impl Point {
        fn distance(point1: &Point, point2: &Point) -> f64 {
            let diffX = (*point1).x - (*point2).x;
            let diffY = (*point1).y - (*point2).y;
            let diffZ = (*point1).z - (*point2).z;
            (diffX * diffX + diffY * diffY + diffZ * diffZ).sqrt()
        }
    }