1

我尝试使用基于数组设备的流并希望将流传递给std::ostream_iteratoror std::istream_iterator,但不幸的是,使用 gcc 4.3.5 时出现编译错误。

Boost::IOStreams 文档指出,取决于底层设备类别,io::stream它要么来自std::basic_istream或要么来自std::basic_ostream两者 ( )。std::basic_iostream数组设备具有可搜索的类别,因此我希望 io::stream 派生自orstd::basic_iostream并与之兼容。但不幸的是,我得到了一个编译错误。std::ostream_iteratorstd::istream_iterator

这是代码片段:

namespace io=boost::io;

typedef unsigned char byte;
typedef io::basic_array<byte>  array_device;
typedef io::stream<array_device> array_stream;

byte my_buffer[256]={};

array_stream  ios_(my_buffer); 

std::istream_iterator<byte> in(ios_);

最后一行导致错误说明:

src/my_file.cpp: In member function 'void my_test_class::ctor::test_method()':
src/my_file.cpp:86: error: no matching function for call to 
'std::istream_iterator<unsigned char, char, std::char_traits<char>, int>::istream_iterator(my_test_class::<unnamed>::array_stream&)'
4

1 回答 1

3

您没有提供足够的模板参数std::istream_iterator- 第二个参数是流的基础字符类型,默认为char,但流的基础字符类型是byte( unsigned char)。

改变

std::istream_iterator<byte> in(ios_);

std::istream_iterator<byte, byte> in(ios_);

应该管用。

于 2011-07-18T22:21:30.110 回答