还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private ios_base(const ios_base&); synthesized method ‘std::basic_ostream<char>::basic_ostream(const std::basic_ostream<char>&)’ first required here

来源:清泛原创     2016-10-24 17:42:08    人气:     我有话说( 0 人参与)

这个错误的原因大概是std::ios_base类的拷贝构造函数是私有的,从return s语句返回时缺少一个合成的构造拷贝构造函数完成流的复制。错误代...

这个错误的原因大概是std::ios_base类的拷贝构造函数是私有的,从return s语句返回时缺少一个合成的构造拷贝构造函数完成流的复制。

错误代码示例:

#include <iostream>
#include <string>

struct Person {
   std::string name;
   Person(std::string n):name(n){}
};
// should return a reference to std::ostream
std::ostream operator<<(std::ostream& s,const Person &p) {
  s << p.name;
  return s;
}

int main() {
   Person p(std::string("Tom"));
   std::cout<<p<<std::endl;
}

重载输出操作符时,由于流对象不能复制,因此如果以值(by value)形式返回时,无法完成从s到std::osream的复制,因此导致上述错误。

 

解决方法是返回流的引用,即改变函数的返回类型为:std::ostream&即可。

ostream

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: