Operator [] indeksowania i problem z wstawianiem do niego

0

Problem następujący: mam sobie klasę (póki co dość ubogą) "Vec", wygląda następująco:

class Vec
{
public:
	char Naz[4];
	int n;
	double *A;
	static int p;
	static double x;

	Vec operator +(Vec v)
	{
		for (int i = 0; i < this->n; i++)
		{
			v.A[i] += (*this)[i];
		}	

		return v;
	}

	Vec operator =(Vec v)
	{
		for (int i = 0; i < this->n; i++)
		{
			(*this).A[i] = v[i];
		}
		return v;
	}

	double operator[](int i)
	{
		return A[i];
	}


}; 

Zanim będę dalej rozwijał wektor, postanowiłem przetestować to, co na razie jest. No i bubel. Kod główny:

 #include "Vector.cpp"
#include <iostream>
#include <conio.h>

using namespace std;

void main()
{
	Vec v1;
	Vec v2;

	v1.n = 3;
	v1.A = new double[v1.n];
	v1.A[0]=1;
	v1.A[1]=2;
	v1.A[2]=3;

	double r = v1[0];

	v2.n = 3;
	v2.A = new double[v2.n];
	v2.A[0]=4;
	v2.A[1]=5;
	v2.A[2]=6;

	Vec v3 = v1 + v2;
	cout << v3[0] << " " << v3[1] << " " << v3[2];

	getch();

}

Działa super. Ale, w momencie gdy chcę (hmm nie wiem jak to lepiej sformułować, ale wiadomo co to znaczy) "wstawić" do operatora, tj. mam na myśli zamiast:

v1.n = 3;
	v1.A = new double[v1.n];
	v1.A[0]=1;
	v1.A[1]=2;
	v1.A[2]=3;

	double r = v1[0];

	v2.n = 3;
	v2.A = new double[v2.n];
	v2.A[0]=4;
	v2.A[1]=5;
	v2.A[2]=6; 

piszę:

v1.n = 3;
	v1.A = new double[v1.n];
	v1[0]=1;
	v1[1]=2;
	v1[2]=3;

	double r = v1[0];

	v2.n = 3;
	v2.A = new double[v2.n];
	v2[0]=4;
	v2[1]=5;
	v2[2]=6; 

Wtedy dostaję błąd o tym, że operator = musi mieć po lewej l-wartość. Czyli że v2[i] nie jest l-wartością? Przecież w momencie gdy piszę v2[i], to zwracane jest tak naprawdę v2.A[i], które już jest l-wartością. Jeśli nie tak to ma wyglądać, to jak mogę zrobić, by działało podstawienie v1[i] = coś; ? Czy w ogóle mogę?

0

Musisz zwrócić referencję. Czyli nie double tylko &double. Zrwacasz &a[index];
Wtedy to po prostu wypisujesz do adresu.

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