ios_base()对象没有公共复制构造函数
今天写C++ Primer Plus17章的最后一题,要构造一个Store函数符来将vector中的string对象写入文件,但是写好后编译器一直报错1
std::ios_base::ios_base(const std::ios_base&) is private
看样子是标准库里面的报错,我写的Store类如下1
2
3
4
5
6
7
8
9
10// functor Store
class Store
{
private:
std::ostream os;
public:
Store(std::ostream & o) : os(o) {}
// overloaded funtions
void operator()(const std::string & s);
};
报错里面说ios_base
的复制构造函数是私有的,我好像在哪里见过。。。然后就想到了在讨论C++函数返回值时候关于返回非const引用中有说cout
对象没有公共的复制构造函数因此不能返回对象,返回对象要创建临时对象,这样会调用复制构造函数,然而ios_base
类(包括他的子类iostream…)没有公开他的复制构造函数于是外部不能调用,自然会报错了。
需要将std::ostream os
改成std::ostream & os
同样我这里也是这个问题,我在Store
类中将os
变量声明为ostream
而不是其引用,这样我在Store
的构造函数中会初始化这个成员,自然会调用os
对象的复制构造函数,这个错误也就会报出来了。
因此以后要使用ios_base
类的时候一定要注意声明称引用。