大佬教程收集整理的这篇文章主要介绍了c – 我应该如何正确地将cout分配给静态ostream引用变量?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class StaticRuntimeContext { public: enum Verbosity { kHIGH,kMEDIUM,kLOW,kSILENT }; static void Construct(); static std::ostream& stdout1() {return stdout1_;} static std::ostream& stdout2() {return stdout2_;} static std::ostream& stdout3() {return stdout3_;} static std::ostream& stderr() {return stderr_;} protected: private: static std::ostream& stdout1_; static std::ostream& stdout2_; static std::ostream& stdout3_; static std::ostream& stderr_; };
我将构造函数定义为:
void StaticRuntimeContext::Construct() { std::ostream& test = cout; stdout1_ = cout; stdout2_ = cout; //stdout3_ = NULL; stderr_ = cerr; }
我无法理解为什么将cout分配给test(std :: ostream&)可以编译,但编译器会为其余部分生成错误消息,如“stdout1_ = cout”.错误消息是:
/usr/lib/gcc/x86_64-redhat-linux/4.6.2/../../../../include/c++/4.6.2/bits/ios_base.h:791:5: error: ‘std::ios_base& std::ios_base::operator=(const std::ios_base&)’ is private
我想知道我应该怎么做才能正确地将cout分配给这些ostream引用变量.谢谢!
您应该定义静态指针而不是引用,在Construct中分配它们,并在访问器中返回引用
static std::ostream& stdout1() {return *stdout1_;} static std::ostream& stdout2() {return *stdout2_;} static std::ostream& stdout3() {return *stdout3_;} static std::ostream& stderr() {return *stderr_;} protected: private: static std::ostream* stdout1_; static std::ostream* stdout2_; static std::ostream* stdout3_; static std::ostream* stderr_; void StaticRuntimeContext::Construct() { stdout1_ = &cout; stdout2_ = &cout; stdout3_ = &cout; stderr_ = &cerr; }
std::ostream* StaticRuntimeContext::stdout1_ = NULL; std::ostream* StaticRuntimeContext::stdout2_ = NULL; std::ostream* StaticRuntimeContext::stdout3_ = NULL; std::ostream* StaticRuntimeContext::stderr_ = NULL;
以上是大佬教程为你收集整理的c – 我应该如何正确地将cout分配给静态ostream引用变量?全部内容,希望文章能够帮你解决c – 我应该如何正确地将cout分配给静态ostream引用变量?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。