Я демонстрирую использование 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.