Solución:
debe leer acerca de la diferencia entre punteros y referencias que podrían ayudarlo a comprender su problema.
En resumen, la diferencia es:
cuando declaras myclass *p
es un puntero y puede acceder a sus miembros con ->
, porque p
apunta a la ubicación de la memoria.
Pero tan pronto como llames p=new myclass[10];
p
comienza a apuntar a la matriz y cuando llamas p[n]
obtienes una referencia, a qué miembros se debe acceder usando .
.
Pero si usas p->member = smth
eso sería lo mismo que si llamaras p[0].member = smth
, porque el número en []
es un desplazamiento de p
a donde buscar el siguiente miembro de la matriz, por ejemplo (p + 5)->member = smth
sería lo mismo que p[5].member = smth
Tenga en cuenta que para una variable de puntero x
myclass *x;
-
*x
significa “obtener el objeto al que apunta x” -
x->setdata(1, 2)
es lo mismo que(*x).setdata(1, 2)
y finalmente -
x[n]
significa “obtener el objeto n-ésimo en una matriz”.
Así por ejemplo x->setdata(1, 2)
es lo mismo que x[0].setdata(1, 2)
.
Porque al usar [] como p[3] ya está desreferenciando el puntero a array + index shift. Después de eso, debe usar “.”, Ya que p[3] es un objeto, no un puntero.