C ++ std :: cout buffer redirect seg fault

时间:2016-02-09 04:39:25

标签: c++ buffer cout

嗨所以我编写了一些简单的代码来将std :: cout输出重定向到std :: ostringstream,它在main中工作正常,例如。

#include <iostream>
#include <sstream>

int main(){
  std::ostringstream m_oss;
  std::streambuf *m_sbuf, *bcout;

  m_sbuf=m_oss.rdbuf();
  bcout = std::cout.rdbuf();
  std::cout.rdbuf(m_sbuf);

  std::cout<<"hello world"<<std::endl;

  std::cout.rdbuf(bcout);        // restore cout's original streambuf

  std::cout<<m_oss.str();

  return 0;
}

但是,如果我想在一个类中进行相同的重定向,那么我会遇到Seg错误 在'std :: cout.rdbuf(m_sbuf);'

这一行

e.g

#include <iostream>
#include <sstream>

class test {

  public:
     std::ostringstream m_oss;
     std::streambuf *m_sbuf, *bcout;

     test(){

        m_sbuf=m_oss.rdbuf();
        bcout = std::cout.rdbuf();
        std::cout.rdbuf(m_sbuf);
     }


     void print(){

       std::cout.rdbuf(bcout);        // restore cout's original streambuf
       std::cout<<m_oss.str();

     }

};

int main(){

  test t();

  std::cout<<"Hello world"<<std::endl;

  t.print();     

  return 0;
}

任何想法如何将其封装在一个类中,因为我真的不希望最终用户看到它并感到困惑?

1 个答案:

答案 0 :(得分:1)

使用它来实例化对象t

test t;

不是

test t();