gpt4 book ai didi

c++ - 从 istreambuf_iterator 构造时无法获取 vector 大小

转载 作者:行者123 更新时间:2023-11-30 00:45:45 50 4
gpt4 key购买 nike

我正在尝试读取一个充满 std::complex<float> 的二进制文件.我尝试了以下代码,as suggested in this SO answer :

#include <complex>
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
#include <vector>


void readRawFile(const std::string inputFile){
std::ifstream input(inputFile, std::ios::binary);
std::vector<std::complex<float>> auxBuffer(std::istreambuf_iterator<std::complex<float>>(input), std::istreambuf_iterator<std::complex<float>>());
std::cout << "Number of raw samples read: " << auxBuffer.size();
}

int main(){
readRawFile("myRawFile.raw");
return 0;
}

我得到以下编译错误:

In function 'void readRawFile(std::string)': 12:59: error: request for member 'size' in 'auxBuffer', which is of non-class type 'std::vector<std::complex<float> >(std::istreambuf_iterator<std::complex<float> >, std::istreambuf_iterator<std::complex<float> > (*)())'

我不明白为什么我不能访问我刚刚创建的没有编译错误的 vector 的大小方法。我想这与 vector 的创建方式有关,但我觉得奇怪的是它并没有在那里给出错误。

有什么解释吗?

最佳答案

您复制的答案显示了如何将流中的原始字符读入缓冲区。这是 istreambuf_iterator 的正确用法.

您正在尝试从流中提取复数。这是一个完全不同的操作,它涉及读取字符 然后用 operator<< 解析它们。那不是什么istreambuf_iterator是为了。类型istreambuf_iterator<complex<float>>将尝试提取类型为 complex<float> 的字符来自basic_streambuf<complex<float>>这是胡说八道。这不是字符类型,您不能拥有包含复数作为其原始字符的 streambuf。

istreambuf_iterator用于从 streambuf 中读取单个字符,而不是用于解析字符并将它们解释为(复数)数字或其他类型。

您需要使用 std::istream_iterator<X>提取 X来自 istream 的值,所以在你修复了最棘手的解析之后,你需要使用 std::istream_iterator<std::complex<float>>作为迭代器类型。

关于c++ - 从 istreambuf_iterator 构造时无法获取 vector 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136152/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com