Funkcje get i set

0

Mam pytanie odnośnie funkcji get i set. Oczywiście pierwsza pobiera dany element klasy druga ustawia. Może przedstawię problem na przykładzie.

struct Position
{
	int x;
 	int y;
};
class Object
{
	private:
		Position position1;
		Position *position2;
	public:
		Object(void);
		~Object(void);

		Position getPosition1()
		{
			return position1;
		}
		Position* getPosition2()
		{
			return position2;
		}
		void setPosition1(Position _position1)
		{
			position1 = _position1;
		}
                void setPosition2(Position* _position2)
		{
			position2 = _position2;
		}
		void setPosition1(int x, int y)
		{
			position1.x = x;
			position1.y = y;
		}
		void setPosition1X(int x)
		{
			position1.x = x;
		}
		void setPosition1Y(int y)
		{
			position1.y = y;
		}
};
int _tmain(int argc, _TCHAR* argv[])
{
	Object object; 
	
	Position p;
	p.x = 100;
	p.y = 200;

	object.setPosition1(p);
	object.setPosition1(101,201);
	object.setPosition1X(102);
	object.setPosition1Y(202);
	object.getPosition1().x = 3;   //Error  1 error C2106: '=' : left operand must be l-value	
	object.getPosition1().y = 3;   //Error  1 error C2106: '=' : left operand must be l-value
	
	object.getPosition2()->x = 2; // Tu błędu nie ma 
	object.getPosition2()->y = 3; // Tu błędu nie ma
	object.setPosition2(&p);
	printf("Position1 - x = %d, y = %d\n",object.getPosition1().x, object.getPosition1().y);
	printf("Position2 - x = %d, y = %d\n",object.getPosition2()->x, object.getPosition2()->y);
	system("pause");
	return 0;
}

Posiadam klase Object która posiada obiekt struktury Position oraz wskaźnik do obiektu struktury Position, przy odwołaniu sie poprzez metodę getPosition().x oraz getPosiotion().y pojawia mi sie błąd Error 1 error C2106: '=' : left operand must be l-value natomiast gdy odwołuje sie do elementów struktury Position przy pomocy wskaźnika wszystko jest ok. Problem w tym, że ja muszę mieć osobny dostęp do zmiany poszczególnych elementów struktury Position. Dla czego przy próbie dostępu do zmiennych za pomocą obiektu Position position pojawia mi sie błąd natomiast przy próbie dostępu za pomocą wskaźnika Position *position wszystko jest ok.

0

A gdzie jest pytanie? o_O''

0

getgetPosition zwraca ci przez wartość (tworzona jest kopia position1), która w tym wypadku staje się obiektem automatycznym, a ty próbujesz coś ustawić na obiekcie automatycznym, który zaraz zostanie zniszczony (dla kompilatora jest to znak, że coś jest nie tak).
getgetPosition2 zwraca przez wskaźnik (i to wskaźnik jest "obiektem" automatycznym, ale wskazuje na coś co jest trwałe), więc próba przypisania jakieś wartości do tego pola nie jest dla kompilatora niczym niezwykłym.

0

A jeżeli koniecznie chcesz w ten sposób to zwróć przez referencje

Position & getPosition1() 
{
    .....

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