Generics 无法向结构的成员添加特征边界

Generics 无法向结构的成员添加特征边界,generics,rust,traits,Generics,Rust,Traits,我试图将usestd::io::Cursor添加到泛型类型R,但保留Read类型边界,以便可以访问Read特性,并随后支持bytes()方法 以下是我到目前为止的结构定义: struct Parse<'parse, R: Read + BufRead + 'parse> { tokens: Vec<Token>, source: Cursor<&'parse mut R>, } 生成以下错误消息: error[E0599]:找不到类型

我试图将use
std::io::Cursor
添加到泛型类型
R
,但保留
Read
类型边界,以便可以访问
Read
特性,并随后支持
bytes()
方法

以下是我到目前为止的结构定义:

struct Parse<'parse, R: Read + BufRead + 'parse> {
    tokens: Vec<Token>,
    source: Cursor<&'parse mut R>,
}
生成以下错误消息:

error[E0599]:找不到类型为'std::io::Cursor:std::io::Read'的名为'bytes'的方法`

谢谢你的帮助

检查错误消息后的注释:

=注意:方法“bytes”存在,但未满足以下特征边界:
`std::io::游标:std::io::读取`
`&mut std::io::游标{

代码中还有一些其他错误。但这应该可以回答您表面上的问题。

啊,当然。当我在自己的代码中实现了这个答案时,我会将其标记为正确,但这肯定很有意义!进行更改似乎会导致相同的错误:@TimMcNamara Oops!这是一个小错误。它应该是正确的been
AsRef
。感谢Peter如此迅速的响应。关于其他错误,您也非常正确。看起来使用游标是完全错误的方法。@TimMcNamara可能是错误的方法。
bytes()
将消耗游标。
// using Cursor because it tracks position internally
use std::io::{Cursor, Read, BufRead};

struct Token {
    start: usize,
    end: usize,
}

struct Parse<'parse, R: Read + BufRead + 'parse> {
    tokens: Vec<Token>,
    source: Cursor<&'parse mut R>,
}

impl<'parse, R: Read + BufRead + 'parse> Parse <'parse, R> {
    fn new(source: &'parse mut R) -> Self {
        Parse {
            tokens: vec!(),
            source: Cursor::new(source),
        }
    }

    fn parse_primitive(&mut self) -> std::io::Result<Token> {
        let start = self.source.position();
        let bytes = self.source.bytes();                     // <- error raised here

        // dummy work
        for _ in 0..3 {
            let byte = bytes.next().unwrap().unwrap()
        }
        let end = self.source.position();
        Ok(Token { start: start as usize, end: end as usize})
    }
}

fn main() {
    //...
}
impl<'parse, R: AsRef<[u8]> + BufRead + 'parse> Parse <'parse, R> {