Mam klasę reprezentującą zbiór punktów; korzystam z pomocniczej klasy Punkt(int, int); klasa Zbior zawiera:
private:
list<Punkt> lista;
Konstruktory, destruktory i przypisania mam prawidłowo zadeklarowane i zdefiniowane:
public:
Zbior();
Zbior(Punkt);
Zbior(Zbior &);
Zbior& operator= (Zbior &);
~Zbior();
To samo dotyczy przeciążenia operatora +=:
Zbior& Zbior::operator+= (Zbior z) {
list<Punkt>::iterator it;
for (it=z.lista.begin(); it!=z.lista.end(); it++) {
int i=count(lista.begin(), lista.end(), *it);
if (i==0) lista.push_back(*it);
}
lista.sort();
return *this;
}
I mam problem z przeciążeniem operatora+. Jego definicja wygląda następująco:
Zbior operator+ (Zbior a, Zbior b) {
Zbior r = a;
r += b;
return r;
}
Przy komendzie C = A + B w programie testującym kompilator wypisuje błąd:
test.cpp:159: error: no match for ‘operator=’ in ‘C = operator+(Zbior, Zbior)(Zbior(((Zbior&)(& B))))’
test.cpp:64: note: candidates are: Zbior& Zbior::operator=(Zbior&)
Można się go pozbyć ustawiając zwracanie referencji, ale wtedy mamy zwracanie & do lokalnej zmiennej i program się wysypuje.
Co należy poprawić aby operator+ działał poprawnie??