przeładowanie operatorów DEV C++ błąd

0

Witam.

Mam taki mały problem, że Dev C++ wyrzuca mi błąd związany z operatorami, a ten sam kod pod Visual Studio działa bez zarzutu:

using namespace std;

class point2d{
	private:
		double x;
		double y;
	public:
		point2d():x(0),y(0){};
		point2d(double x,double y):x(x),y(y){};
		point2d(const point2d &p):x(p.x),y(p.y){};

		void Write(){cout<<"X= "<<x<<" Y="<<y<<endl;}

		// operator podstawiania

		inline void operator =(point2d &p){x = p.x; y = p.y;}; // proste podstawienie

		// Operatory matematyczne

		inline void operator +=(point2d &p){x += p.x; y += p.y;};
		point2d operator +(const point2d &p){point2d p1(x + p.x, y + p.y); return p1;};
};

int main(){

	point2d p(10,20);
	point2d p2 = p;
	p += p2;
	p.Write();
	p = p + p2; // tutaj testowanie działania powoduje błąd: Error] no match for 'operator=' in 'p = point2d::operator+(point2d&)((*(point2d*)(& p2)))' 

	system("PAUSE");

	return 0;
}

Czy da się to jakoś po ludzku w DevC++ zrobić?

0

Dev-C++ jest starym środowiskiem (przynajmniej ta wersja z 2005, która nie wiedzieć czemu trzyma popularność na wielu uczelniach), którego nie powinieneś używać.

Kod wygląda "ok", ale:

  1. operatory zwracają void, wtf?
  2. operatory przyjmują non-const referencje - dlaczego?
  3. operator+ powinien być implementowany w kontekście operatora+= i nie powinien być członkiem klasy (po lewej stronie możesz mieć coś co konwertuje się do point2d)
  4. system("PAUSE") to zło. Za złapanie konsoli powinno odpowiadać środowisko wykonania.
1

Ok, rozumiem i poprawiłem tak, że działa poprawnie:

using namespace std;

class point2d{
	private:
		double x;
		double y;
	public:
		point2d():x(0),y(0){};
		point2d(double x,double y):x(x),y(y){};
		point2d(const point2d &p):x(p.x),y(p.y){};
		
		void Write(){cout<<"X= "<<x<<" Y="<<y<<endl;}
		
		// operator podstawiania
		
		point2d & operator =(const point2d &p){
			x = p.x;
		y = p.y;
		return *this;}; // tutaj był błąd, przez który DevC++ wywalał błąd
		
		// Operatory matematyczne
		
		inline void operator +=(const point2d &p){x += p.x; y += p.y;};
		/*point2d operator +(point2d p){
			point2d p1(x + p.x, y + p.y);
			return p1;};*/ // wywaliłem na zewnątrz
};

point2d operator +(const point2d &p1, const point2d &p2){ // obsługa operatora dodwania
	point2d p = p1;
	p += p2;
	return p;
}

int main(){
	
	point2d p(10,20);
	point2d p2 = p;
	p += p2;
	p.Write();
	p = p2 + p;
	p.Write();
	
	// tutaj wywaliłem system("PAUSE");
	cout<<"Wciśnij dowolny przycisk aby zakończyć program.";
	getch();
	
	return 0;
}

Mam nadzieję, że już teraz jest dobrze.

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