带有泛型编译错误的rust struct

时间:2014-09-27 05:53:55

标签: compiler-errors rust

我在Rust中编写了以下代码。版本是0.12.0-每晚。

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

我无法通过编译器消息弄清楚为什么无法编译示例程序。 我该如何解决?

1 个答案:

答案 0 :(得分: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移出&self。如果您只想使用可复制类型,可以将impl<T>更改为impl<T: Copy>,或者更改get以返回引用:

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