【发布时间】:2020-06-22 20:10:07
【问题描述】:
我正在尝试通用实现,并尝试添加一个结构的 x 和 y 字段,它们都是 T 类型,
我在impl<T> Point<T> 下看到一条红色波浪线,还有以下错误消息...
cannot add `T` to `T`
no implementation for `T + T`
help: the trait `std::ops::Add` is not implemented for `T`
从我的代码中可以看出,我已经为类型T添加了特征std::ops::Add。
如何让下面的代码工作?
struct Point<T>
where
T: std::ops::Add<Output = T>,
{
x: T,
y: T,
}
impl Point<f32> {
fn add_f32(&self) -> f32 {
self.x + self.y
}
}
//error
impl<T> Point<T> {
fn add(&self) -> T
where
T: std::ops::Add<Output = T>,
{
self.x + self.y
}
}
【问题讨论】:
-
编译器实际上在这里可以进一步帮助您:“帮助:考虑限制类型参数
T”,然后是impl<T: std::ops::Add> Point<T> {。完成此操作后,您会发现一些其他问题需要解决(即Add按值接收其操作数,但您有对&self的引用,而T不限于Copy。 -
请注意,出现此问题是因为约束
T: Add<Output = T>被放置在结构声明中。在这种情况下也可以省略,因为我们这里不需要它:struct Point<T> { x: T, y: T, } -
你是对的。在我删除结构定义中的 where 子句并删除 self.我将在这里输入工作代码
标签: rust