【问题标题】:rust struct with generics compile error带有泛型的 rust struct 编译错误
【发布时间】:2014-09-27 14:11:44
【问题描述】:

我在 rust 中编写了以下代码。版本是 0.12.0-pre-nightly。

struct Sample<T> {
    x: T
}

impl<T> Sample<T> {
    pub fn new<T>(v: T) -> Sample<T> {
        Sample { x: v }
    }

    pub fn get<T>(&self) -> T {
        self.x
    }
}

fn main() {
    Sample::new(0i).get(); // expect int 0
}

并得到编译错误。

hoge.rs:11:9: 11:15 error: mismatched types: expected `T`, found `T` (expected type parameter, found type parameter)
hoge.rs:11         self.x

我无法通过编译器消息找出无法编译示例程序的原因。 我该如何解决?

【问题讨论】:

    标签: compiler-errors rust


    【解决方案1】:

    不要将类型参数放在你的方法中。他们必须使用impl 中的那个。

    struct Sample<T> {
        x: T
    }
    
    impl<T> Sample<T> {
        pub fn new(v: T) -> Sample<T> {
            Sample { x: v }
        }
    
        pub fn get(&self) -> T {
            self.x
        }
    }
    
    fn main() {
        Sample::new(0i).get(); // expect int 0
    }
    

    P.S.:该代码也无法编译,因为 get 试图将 x 移出 &amp;self。如果您只想使用可复制类型,可以将impl&lt;T&gt; 更改为impl&lt;T: Copy&gt;,或者更改get 以返回引用:

        pub fn get(&self) -> &T {
            &self.x
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多