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