如何解决:binary =:不存在采用const和fullName的RHS的运算符

时间:2019-06-04 22:26:21

标签: c++ stl operator-keyword

我正在演示将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的集时,我希望将输出复制到屏幕上。

1 个答案:

答案 0 :(得分:1)

由于screen的类型为ostream_iterator<string>,因此您需要将 strings 分配给screen。由于没有从fullNamestring的转换,因此会出现错误。

由于您正在编写fullName对象,因此应将screen的声明更改为

ostream_iterator<fullName> screen(cout, "\n");