[英]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.