Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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++ Can';从静态库通过std::cout输出_C++_Static Libraries_Cout - Fatal编程技术网

C++ Can';从静态库通过std::cout输出

C++ Can';从静态库通过std::cout输出,c++,static-libraries,cout,C++,Static Libraries,Cout,我正在链接一个静态库,该库有一个std::cout包装器,如果我从应用程序代码中使用它,它就可以工作,但库的内部输出(使用方式完全相同)中没有一个显示任何输出 也许这并不重要,但我正在使用Qt Creator和qmake项目文件来构建。我已经在应用程序的CONFIG中添加了console(甚至在静态库中也尝试过,但没有效果) 可能出现什么问题?我如何解决?谢谢 UPDATE:这个包装器是一个经过修改的版本:这个std::cout包装器将无法隐式地“进入”另一个库。您是否考虑过将cout全部重定向

我正在链接一个静态库,该库有一个
std::cout
包装器,如果我从应用程序代码中使用它,它就可以工作,但库的内部输出(使用方式完全相同)中没有一个显示任何输出

也许这并不重要,但我正在使用Qt Creator和qmake项目文件来构建。我已经在应用程序的
CONFIG
中添加了
console
(甚至在静态库中也尝试过,但没有效果)

可能出现什么问题?我如何解决?谢谢


UPDATE:这个包装器是一个经过修改的版本:

这个
std::cout
包装器将无法隐式地“进入”另一个库。您是否考虑过将
cout
全部重定向?比如:


这样,您就可以控制输入到
std::cout
的数据,而不管库如何输出(当然,除非它们自己重定向
std::cout

代码胜于雄辩。根据链接帖子的代码,数据只会在通过该类时被过滤;包装器无法直接接触到
std::cout
的输出。您应该使用RIAA确保返回原始缓冲区。我见过在构造期间动态分配cout缓冲区和在销毁时删除缓冲区的实现。如果你弄乱了指向UB的指针,那么你应该在cout对象被破坏之前恢复原始缓冲区以防万一(就像你做的那样,但以一种异常安全的方式)。好吧,它是我自己的库,对cout流没有任何特殊的作用。我想你的意思是RAII-资源分配是初始化,而不是唱片业;)我发现了我的问题,这是一个邪恶的打字错误,对这个输出的工作至关重要。。。尽管如此,我还是接受了你的回答。谢谢你。
int main() { 
    std::streambuf* cout_sbuf = std::cout.rdbuf(); // save original sbuf 
    std::ofstream   fout("cout.txt"); 
    std::cout.rdbuf(fout.rdbuf()); // redirect 'cout' to a 'fout' 
    // ... 
    std::cout.rdbuf(cout_sbuf); // restore the original stream buffer 
}