Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的ostream至ostringstream(下行)+;与Qt&;MVC_C++_Qt_Stream_Downcast - Fatal编程技术网

C++ C+中的ostream至ostringstream(下行)+;与Qt&;MVC

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

我需要在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.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;