我有这样的结构
struct X{
ostream out;
X() : out(cout) {}
...
};
我注意到我必须用&正确传递cout作为默认参数:ostream& out;我不知道为什么,我不知道是否有其他可能性保持ostream没有&。此外,当我尝试设置
X x;
ofstream out;
x.out = out;
编译器发现了很多错误......我希望能够将X :: out设置为cout或者设置为ofstream。怎么做?
答案 0 :(得分:2)
你可能做的最好的事情就是改变你的课程设计,这样你就不再需要初始化一个成员变量了。编译器阻止了复制,基于指针的解决方案将引入所有权问题,std::shared_ptr
会产生std::cout
的麻烦,参考成员将创建悬挂引用的可能性。
尝试重构代码,以便在需要时始终将流作为对外部方法的引用传递:
struct X{
X() {}
void f(std::ostream &os);
};
答案 1 :(得分:1)
ostreams不能通过值传递。你必须通过引用或指针传递。
如果您希望能够使x.out
在其生命周期内引用不同的流,则将其设为指针。否则将其作为参考。
答案 2 :(得分:0)
Stream对象无法复制,需要使用引用。
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};