2011-07-16 45 views
1

我試圖使用一個基於數組設備的流,並希望將流傳遞給std::ostream_iteratorstd::istream_iterator,但不幸的是,我得到一個gcc 4.3.5的編譯錯誤。與std :: ostream_iterator一起使用boost IOStream

升壓::輸入輸出流文檔指出io::stream要麼從std::basic_istreamstd::basic_ostream或二者(std::basic_iostream)依賴於底層設備類別的。陣列設備有可搜索的類別,所以我希望io :: stream來自std::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&)' 

回答

3

你不是std::istream_iterator提供足夠的模板參數 - 第二個參數是流的基礎字符類型,默認爲char,但流的基礎字符類型爲byteunsigned char)。

更改

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

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

應該工作。

+0

非常感謝!非常感謝您的幫助!我不知何故忽略了這一點! – ovanes

相關問題