[英]Binary overloaded operator=
所以我正在尝试使用std::ostream_iterator
和std::iostream_iterator
来编写和读取文件。 写作过程运作良好,没有任何错误。 但至于阅读,我迷失了。 错误,我有:
1> c:\\ program files(x86)\\ microsoft visual studio 14.0 \\ _vc \\ include \\ xutility(2316):error C2678:binary'=':找不到运算符,它接受类型为'const WRstruct'的左手操作数(或者没有可接受的转换)
它说:
c:\\ users \\ xxxxxxx \\ desktop \\ ttttt \\ ttttt \\ wrstruct.h(21):注意:可能是'WRstruct&WRstruct :: operator =(const WRstruct&)'1> c:\\ program files(x86)\\ microsoft visual studio 14.0 \\ _vc \\ include \\ xutility(2316):注意:尝试匹配参数列表'(const WRstruct,WRstruct)'
重载operator=
的正确方法是什么?
类:
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <iterator>
#include <istream>
class WRstruct
{
private:
std::string name;
std::string number;
friend std::ostream& operator<<(std::ostream&, const WRstruct&);
friend std::istream& operator >> ( std::istream& is, WRstruct&);
public:
WRstruct(){};
void write();
void read();
~WRstruct(){};
};
std::ostream& operator<<(std::ostream& os, const WRstruct& p)
{
os << "User Name: " << p.name << std::endl
<< "Name: " << p.number << std::endl
<< std::endl;
return os;
}
std::istream& operator >> (std::istream& is, WRstruct& p)
{
is >> p.name>>p.number;
return is;
}
方法:
void WRstruct::write()
{
std::vector<WRstruct> vecP;
std::copy(std::istream_iterator<WRstruct>(std::cin),
std::istream_iterator<WRstruct>(), std::back_inserter(vecP));
std::ofstream temp("temp.txt", std::ios::out);
std::ostream_iterator<WRstruct>temp_itr(temp, "\n");
std::copy(vecP.begin(), vecP.end(), temp_itr);
}
void WRstruct::read()
{
std::vector<WRstruct> vec;
std::ifstream readFile("temp.txt");
std::istream_iterator<WRstruct> istr(readFile);
copy(vec.begin(), vec.end(), istr);
std::istream_iterator<WRstruct> end_istr;
copy(istr, end_istr, back_inserter(vec));
std::ostream_iterator<WRstruct> osIter(std::cout," ");
copy(vec.begin(),vec.end(),osIter);
}
和main():
#include <iostream>
#include "WRstruct.h"
int main()
{
WRstruct r;
r.write();
//r.read();
return 0;
}
据我所知,函数WRstruct::read
的含义是“从'temp.txt'读取所有数据并将其写入控制台”。 顺便说一下,函数read
打印的东西很奇怪,所以考虑相应地命名你的函数。
要使用istream_iterator
从文件中读取内容,您应该创建一对迭代器(一个指向文件的开头,另一个指向空)并使用std::copy
。 所以,你的函数的阅读部分应该是这样的
std::vector<WRstruct> vec;
std::ifstream readFile("temp.txt");
std::istream_iterator<WRstruct> istr(readFile);
std::istream_iterator<WRstruct> end_istr;
copy(istr, end_istr, back_inserter(vec));
因此,您只需在WRstruct::read
注释或删除一行即可消除编译错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.