簡體   English   中英

C ++ std :: cout緩沖區重定向seg錯誤

[英]C++ std::cout buffer redirect seg fault

嗨,所以我寫了一些簡單的代碼,將std :: cout輸出重定向到std :: ostringstream,並且在main eg中可以正常工作。

#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;
}

但是,如果我想在一個類中執行相同的重定向,那么我會在“ std :: cout.rdbuf(m_sbuf);”行上遇到Seg錯誤。

例如

#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;
}

任何想法如何將其封裝在類中,因為我真的不希望最終用戶看到它並感到困惑?

使用它實例化對象t

test t;

test t();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM