Klasa reprezentujaca zbiór punktóww(int,int)

0

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??

0

Sam w zasadzie sobie odpowiedziałeś na pytanie. Masz zdefiniowany operator =

Zbior& operator= (Zbior &);      

Czyli po prawej stronie ma stać referencja. Natomiast Twój operator + zwraca wartość, i stąd jest problem. Ja widzę dwie możliwości, albo przedefiniować operator + żeby zwracał referencję albo przedefiniować operator = żeby przyjmował wartość ;-)

0
Zbior(const Zbior &); 
Zbior& operator= (const Zbior &);        
Zbior& Zbior::operator+= (const Zbior &z){...}

Zbior operator+ (const Zbior &a, const Zbior &b) 
{
        Zbior r = a;
        r += b;
        return r;
}
0

Dziękuję za pomoc :)
Wystarczyło dodać const przy konstruktorze kopiującym oraz operatorze= i wszystko zaczęło ładnie działać :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1