当前位置: 首页 > 知识库问答 >
问题:

rust中的类型“”没有实现“core::gends::Sized”的特性是什么?

牟子真
2023-03-14

我希望这能奏效:

trait Task<R, E> {
  fn run(&self) -> Result<R, E>;
}

mod test {

  use super::Task;

  struct Foo;
  impl<uint, uint> Task<uint, uint> for Foo {
    fn run(&self) -> Result<uint, uint> {
      return Err(0);
    }
  }

  fn can_have_task_trait() {
    Foo;
  }
}

fn main() {
  test::can_have_task_trait();
}

...但它没有:

<anon>:10:3: 14:4 error: the trait `core::kinds::Sized` is not implemented for the type `<generic #0>`
<anon>:10   impl<uint, uint> Task<uint, uint> for Foo {
<anon>:11     fn run(&self) -> Result<uint, uint> {
<anon>:12       return Err(0);
<anon>:13     }
<anon>:14   }
<anon>:10:3: 14:4 note: the trait `core::kinds::Sized` must be implemented because it is required by `Task`
<anon>:10   impl<uint, uint> Task<uint, uint> for Foo {
<anon>:11     fn run(&self) -> Result<uint, uint> {
<anon>:12       return Err(0);
<anon>:13     }
<anon>:14   }
<anon>:10:3: 14:4 error: the trait `core::kinds::Sized` is not implemented for the type `<generic #1>`
<anon>:10   impl<uint, uint> Task<uint, uint> for Foo {
<anon>:11     fn run(&self) -> Result<uint, uint> {
<anon>:12       return Err(0);
<anon>:13     }
<anon>:14   }
<anon>:10:3: 14:4 note: the trait `core::kinds::Sized` must be implemented because it is required by `Task`
<anon>:10   impl<uint, uint> Task<uint, uint> for Foo {
<anon>:11     fn run(&self) -> Result<uint, uint> {
<anon>:12       return Err(0);
<anon>:13     }
<anon>:14   }
error: aborting due to 2 previous errors
playpen: application terminated with error code 101
Program ended.

游戏Geofence:http://is.gd/kxDt0P

那么,发生了什么事?

我不知道这个错误是什么意思。

是因为我使用的是Result,而这要求U,V不是大小的吗?在这种情况下,它们的尺寸为何?我没有写:

Task<Sized? R, Sized? E>

所有泛型现在都是动态调整大小还是什么?(在这种情况下,大小是什么?甚至是什么意思?)

怎么回事啊?

共有2个答案

宋和颂
2023-03-14

Rust不提供“泛型专门化”:您将您的特性定义为任务

仅使用特定类型(如您尝试使用

例如,如果你写了:

trait Foo<R> {}

struct Bar;

struct Baz;

impl<Baz> Foo<Baz> for Bar {}

您不应该期望实现区中的Bazstruct Baz相同:它被隐藏,就像函数的var参数将隐藏var全局变量一样。

然而,当您使用原始类型执行此操作时,却获得了这个神秘的错误消息,而不是简单的阴影,这可能是一个错误,您应该有阴影或更清晰的错误消息。

封昊天
2023-03-14

你只需要删除

impl Task<uint, uint> for Foo { ... }

我认为您所遇到的错误是编译器对未使用的类型参数感到困惑。此超级精简版本也会出现这种情况:

trait Tr {}
impl<X> Tr for () {}

 类似资料:
  • 下面的代码,我得到一个trait没有实现类型错误。我已经删除了触发错误不需要的所有其他代码。 游戏Geofence:http://is.gd/tjDxWl 完全错误是: 我是个新手,不知道从这里该去哪里。有什么建议吗?

  • 编译以下代码时: 我得到一个错误: 错误消息试图说明什么?还有,怎么修? 有一个相关的问题,但解决方案是修改特征<code>a</code>(在我的例子中对应于<code>可绘制</code>),但这在这里是不可能的,因为<code>可以绘制</code>来自外部库。

  • 作为学习Rust的一个简单练习,我决定实现一个简单的二进制搜索: 在构建时,我得到了这个我不理解的错误。什么是类型?变量mid始终是usize,但即使使用cast,我也会遇到这个编译错误。

  • 虽然Rust中的所有整数类型都实现了强调总排序的,但浮点类型只实现了。这意味着可能存在无法比较的浮点值。这似乎很难理解,因为浮点数可以被认为是实数的近似值,实数碰巧是一个完全有序的集合。即使加上正无穷大和负无穷大,也会使实数集保持完全有序。为什么在铁锈这个奇怪的选择? 这种限制意味着通用排序/搜索算法只能假设数字的部分排序。IEEE 754标准似乎提供了一个总排序谓词。 NaN在通用代码中是个大问

  • 我想在main函数中打印Tweet数据类型的实例,但摘要特征不实现调试特征。有没有办法在特征或任何工作上实现特征。取消注释第二行并注释第一行将工作,因为字符串类型实现了显示特征。 error[E0277]: 未实现 -- 错误:由于以前的错误而中止 有关此错误的更多信息,请尝试。错误:无法编译。 要了解更多信息,请使用--verbose再次运行该命令。

  • 问题内容: 说我有3个这样的课程: 难道那么有可能确定一个特定的对象是否是他的一个实例,或? 我认为这样的事情可能会起作用: 但是经过一点阅读之后,我认为它始终会被评为B,因为它只是测试强制转换是否有效,并且两者之间没有实质性差异。 问题答案: 做这个: