Как исправить: binary =: оператор не существует, который принимает RHS const & fullName - PullRequest
0 голосов
/ 05 июня 2019

Я демонстрирую использование C ++ STL и ostream_iterator с наборами.У меня есть простой класс с сеттерами / геттерами и конструкторами.Всякий раз, когда я пытаюсь использовать функцию ostream_iterator и copy, я получаю «двоичный» =: не найдено ни одного оператора, который принимает правый операнд типа «const fullName» (или нет приемлемого преобразования) "

Я кодирую в Visual Studio 2019

Я пробовал несколько вариантов оператора =.Я удалил & for rhs, сделал функцию недействительной и написал более сложную версию, проверяющую, равны ли lhs и rhs.Очевидно, я его прогуглил и перешел по ссылке на страницу с ошибкой 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 Ответ

1 голос
/ 05 июня 2019

Поскольку screen имеет тип ostream_iterator<string>, вам необходимо присвоить строки screen.Поскольку нет преобразования fullName в string, вы получите ошибку.

Поскольку вы пишете fullName объектов, вы должны изменить значение screen на

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