【发布时间】:2016-07-11 10:28:04
【问题描述】:
我有一个这样的结构
#[derive(Copy, Clone)]
enum Command {
Quit,
Error { msg: String },
}
编译器抱怨它无法为Error 生成复制构造函数。
我需要使结构可复制以通过通道传递到另一个线程。
error: the trait `Copy` may not be implemented for this type; variant `Error` does not implement `Copy` [E0205]
#[derive(Copy, Clone)]
^~~~~~~~~~~~~~~~~~~~~~
note: in this expansion of #[derive_Copy] (defined in src/main.rs)
如果msg 是i32,则编译。这么基本的东西看起来很奇怪
键入为String 是不可复制的。
【问题讨论】:
-
String与Copyable 不同,Vec不是。两者都处理堆分配的内容,因此不能用memcpy安全地复制。本书相关页面:doc.rust-lang.org/book/strings.html -
我明白了,但我需要将对象传递给通道,并且它需要类型是可复制的。我从头到尾阅读了本教程,但内容很浅。
-
@DaneelS.Yaitskov 类型不必须是可复制的才能通过通道传递。
-
确实,只需要
Sendtrait,它是由编译器自动派生的,并不暗示Copy。你应该认真找出真正的问题在哪里。请向我们展示更多代码并相应地改写问题。
标签: rust