C++ C+中的ostream至ostringstream(下行)+;与Qt&;MVC
我需要在ostringstream的对象中转换ostream的对象。 代码如下:C++ C+中的ostream至ostringstream(下行)+;与Qt&;MVC,c++,qt,stream,downcast,C++,Qt,Stream,Downcast,我需要在ostringstream的对象中转换ostream的对象。 代码如下: //gerarchia_view.h class bagaglio_view{ private: std::ostream& os; std::string data; public: bagaglio_view(); std::string print_bagaglio(const bagaglio &b) const; }; //gerarchia_view.c
//gerarchia_view.h
class bagaglio_view{
private:
std::ostream& os;
std::string data;
public:
bagaglio_view();
std::string print_bagaglio(const bagaglio &b) const;
};
//gerarchia_view.cpp
bagaglio_view::bagaglio_view():data(" "),os(std::cout){
}
std::string bagaglio_view::print_bagaglio(const bagaglio& b) const{
os<<b; // operator << is overloaded
std::ostringstream* oss=static_cast<std::ostringstream*>(&os);
return oss->str(); // down-cast, segm fault
}
返回std::ostream os中的字符串。
我怎样才能解决这个问题?我尝试了动态转换并使用std::ostringstream替代std::ostream,但操作符您的
std::ostream&
是否实际引用了std::ostringstream
或其他内容?没有,但它是在bagaglio\u视图::bagaglio\u视图()中构造的该构造函数不会将您的std::ostream&
附加到std::ostringstream
上,而是将其附加到不是std::ostringstream
的'std::cout'。如果您将其转换为错误的类型或未定义的行为,它将中断。Ok。那么,我用什么来代替std::cout呢?你说你想“返回std::ostream os中的字符串”,但问题是std::ostream
对象通常不包含字符串。例如,std::ofstream
将其输出发送到硬盘std::cout
将其输出发送到控制台。它们不会保留输出内容的内部字符串副本。只有std::ostringstream
能做到这一点。那么你想达到什么目的呢?也许我们能找到另一种方法?
std::string bagaglio_view::print_bagaglio(const bagaglio& b) const;