我正在演示将C ++ STL和ostream_iterators与集合一起使用。我有一个简单的带有setters / getters和构造函数的类。每当我尝试使用ostream_iterator和copy函数时,都会收到“ binary'=':找不到使用'const fullName'类型的右侧操作数(或没有可接受的转换)的运算符”
我正在Visual Studio 2019中进行编码
我尝试了算子=的几种变体。我删除了&for rhs,使该函数无效,并编写了一个更复杂的版本以检查lhs和rhs是否相等。显然,我已经对其进行了Google搜索,然后点击了指向MS错误页面的链接。 我也知道我的布景已正确填充。我成功遍历了集合。
这是我的班级文件的摘要。
class fullName {
protected:
string fname;
string lname;
public:
friend ostream& operator <<(ostream& out, const fullName& person) {
out << person.lname << ", " << person.fname;
return out;
}
fullName& operator = (const fullName& rhs) {
fname = rhs.fname;
lname = rhs.lname;
return *this;
}
friend bool operator <(fullName lhs, fullName rhs) {
return lhs.lname < rhs.lname; //simple cheesy sort by last name
}
friend bool operator >(fullName lhs, fullName rhs) {
return lhs.lname > rhs.lname; //simple cheesy sort by last name
}
};
复制行生成错误。
set <fullName, less <fullName>> people;
set <fullName>::iterator itr;
//populate from file
ostream_iterator<string> screen(cout, "\n"); //ostream object, delimiter
copy(people.begin(), people.end(), screen);
当我使用类型为int或string的集时,我希望将输出复制到屏幕上。
答案 0 :(得分:1)
由于screen
的类型为ostream_iterator<string>
,因此您需要将 strings 分配给screen
。由于没有从fullName
到string
的转换,因此会出现错误。
由于您正在编写fullName
对象,因此应将screen
的声明更改为
ostream_iterator<fullName> screen(cout, "\n");