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

[name]没有实现d::io::读取

潘辰龙
2023-03-14

当我制作一个复合特征(名称?)这是由另外两个特性组成的,编译器似乎没有检测到这两个特性是由该复合特性实现的。

代码如下:

use std::io::{Read, Seek};
use zip::read::ZipArchive;

trait ReadSeek: Read + Seek {}
impl<T: Read + Seek> ReadSeek for T {}

pub struct ArchiveZip<'a> {
    path: &'a str,
    archive: ZipArchive<&'a (dyn ReadSeek)>,
}

错误是这样的:

error[E0277]: the trait bound `&'a (dyn ReadSeek + 'a): std::io::Read` is not satisfied
  --> src/archive/zipfile.rs:12:14
   |
12 |     archive: ZipArchive<&'a (dyn ReadSeek)>,
   |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::io::Read` is not implemented for `&'a (dyn ReadSeek + 'a)`
   | 
  ::: /Users/nhooey/.cargo/registry/src/github.com-1ecc6299db9ec823/zip-0.5.11/src/read.rs:50:26
   |
50 | pub struct ZipArchive<R: Read + io::Seek> {
   |                          ---- required by this bound in `ZipArchive`
   |
   = note: `std::io::Read` is implemented for `&'a mut (dyn archive::ReadSeek + 'a)`, but not for `&'a (dyn archive::ReadSeek + 'a)`

为什么它没有检测到ReadSeek特性没有同时实现ReadSeek

(我省略了另一个同样以同样方式抱怨< code>Seek的错误消息。)

共有1个答案

吕博耘
2023-03-14

从错误消息中您可以看到:结构 ZipArchive

您的代码有:< code>ZipArchive

因此,您可以为引用实现您的trait(根据我的经验,这通常不太好),或者您可以找到一种方法让R成为直接实现所需特征的类型。查看引用的留档,您可以看到ReadSeek是为可变引用实现的。因此,将您的引用更改为可变应该可以解决问题。

 类似资料:
  • 我写了一个宏 我就这样用着它 我第一次使用宏时,它就工作了 但第二次,它失败了: 我不知道为什么会这样。我希望第二个调用将以与第一个调用相同的方式工作,但在验证步骤中似乎存在错误。事实上,如果我删除

  • 我对Clojure很陌生,玩得很开心。有一件事我遇到了一些麻烦,那就是如何阅读错误,我个人认为它们不是很具有描述性,但这可能是由于我的“新手”。 例如,我现在遇到的问题是当我尝试启动我的环形服务器时(如果需要,我可以提供更多详细信息): 这对我来说太模糊了,我怎么知道我做错了什么?我不记得和任何“制造阅读器”、协议或IOFactory打过交道。

  • 我尝试使用Tokio库在生锈中初始化具有异步功能的服务器: 这会抛出一个错误,表示: 当我将鼠标悬停在<code>侦听器</code>上时,其类型未知。

  • 我正在使用clojure-1.5。1,compojure-1.1。5,克罗斯塔什-1.3。1. 模板文件位于资源/公共/模板文件夹下。 代码: 对Clostache渲染资源的调用引发以下异常:

  • 我们每天都使用jsch-0.1.53.jar通过SFTP获取文件,但是运行了几年后,它现在停止工作了。我想服务器管理员可能已经升级了服务器软件。 相关代码(JAVA 1.7)不包含任何意外: 最后一行抛出“java.io.IOException:io流读取结束”,所以我想服务器会关闭连接。 我升级到了jsch 0.1.55(尽管下面的日志声称它是0.1.54),但这并没有改变任何事情。 jsch的

  • 本文向大家介绍Bootstrap 4 .d-flex类的实现,包括了Bootstrap 4 .d-flex类的实现的使用技巧和注意事项,需要的朋友参考一下 在Bootstrap中使用d-flex类创建一个flexbox容器。 在这里,我设置了两个flex项目- 您可以尝试运行以下代码来实现.d-flex类- 示例