generics - 错误的类型参数 : expected 1 but found 0

标签 generics rust

我正在尝试传递 std::io::BufReader 的引用一个函数:

use std::{fs::File, io::BufReader};

struct CompressedMap;

fn parse_cmp(buf: &mut BufReader) -> CompressedMap {
    unimplemented!()
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut buf = BufReader::new(File::open("data/nyc.cmp")?);

    let map = parse_cmp(&mut buf);

    Ok(())
}

我收到此错误消息:

error[E0107]: wrong number of type arguments: expected 1, found 0
 --> src/main.rs:5:24
  |
5 | fn parse_cmp(buf: &mut BufReader) -> CompressedMap {
  |                        ^^^^^^^^^ expected 1 type argument

我在这里错过了什么?

最佳答案

看看 implementation of BufReader清楚地表明 BufReader 有一个必须指定的泛型类型参数:

impl<R: Read> BufReader<R> {

更改您的函数以说明类型参数。您可以允许任何泛型类型:

use std::io::Read;

fn parse_cmp<R: Read>(buf: &mut BufReader<R>)

您还可以使用特定的具体类型:

fn parse_cmp(buf: &mut BufReader<File>)

关于generics - 错误的类型参数 : expected 1 but found 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272392/

相关文章:

java - T、U、V、S、E 等通用参数有什么用?

C#泛型方法

java - Kotlin 中的通用转换

rust - 使用Box对结构进行反序列化

iterator - 如何允许在各种类型的 IntoIterator 项目上多次实现特征?

java - 自动装箱不适用于参数化类型

generics - 如何在 Kotlin 中获取具体泛型参数的实际类型参数?

rust - RFC 401 的 coerce_inner 有什么用?

rust - 如何在构建脚本中指定链接器标志/参数?

rust - 过程宏可以作为函数进行调试吗?