为什么istream_iterator <unsigned char,=“”unsigned =“”char =“”> throw std :: bad_cast?</unsigned>

时间:2010-08-31 14:30:57

标签: c++ stl iostream istream istream-iterator

发生了什么事?

#include <iostream>
#include <iterator>
#include <sstream>

int main() {
    std::basic_stringbuf<unsigned char> buf;
    std::basic_istream<unsigned char> stream(&buf);
    // the next line throws std::bad_cast on g++ 4.4
    std::istream_iterator<unsigned char, unsigned char> it(stream);
}

我在构造迭代器之前尝试过stream.write(some_array, sizeof(some_array),但没有用。

感谢。

2 个答案:

答案 0 :(得分:2)

它从sentry对象的构造函数抛出,它检查流上的ctype facet(它需要它以便它可以跳过空格),这恰好是NULL,因为它没有为unsigned chars定义。

您是否需要处理该流上的空白?如果没有,请转到

std::istreambuf_iterator<unsigned char> it(stream);

答案 1 :(得分:0)

不应该是:

std::istream_iterator<unsigned char> it(stream);