Dus ik heb een bovenliggende klasse gemaakt, die ik Parent
zal noemen die een Square*
rasterlidvariabele heeft. De rastervariabele is een verwijzing naar een groot aantal vierkanten, die key
lidvariabelen bevatten. (Zie dit project als een hashtabel) Het probleem is dat ik een functie maak in de klasse Parent
die de belangrijkste variabelen in de array Square
bewerkt, en ik krijg een foutmelding. Deze regel code compileert:
this->grid = new Square[row*col];
maar deze regel compileert niet:
this->grid[i*col + j]->key1 = j;
het onderstreept this
en zegt dat expressie een aanwijzertype moet hebben. Ik vroeg me af of iemand ideeën had over wat ik verkeerd doe?
void Parent::initialize(int row,int col) {
this->grid = new Square[row*col];
for(int i = 0; i < row; i++) {
for(int j = 0;j < col; j++) {
this->grid[i*col + j]->key1 = j;
this->grid[i*col + j]->key2 = i;
}
}
Antwoord 1, autoriteit 100%
Je moet gebruiken
this->grid[i*col + j].key1
this->grid[i*col + j].key2
Dat komt omdat zelfs als het waar is dat je raster een pointer is, je in het geheugen een array van Square
-objecten hebt toegewezen. Dus als u de operator [] gebruikt, krijgt u een object van het type Square
en niet een Square*
en voor een Square
-object moet u gebruik de . operatoren niet de -> operator.
Antwoord 2, autoriteit 20%
Ik denk dat this->grid
van het type Square*
is, dus this->grid[0]
is van het type Square&
en u moet .
(punt) niet ->
(pijl) gebruiken om toegang te krijgen tot leden van Square&
. Om pijl voor uitdrukking te gebruiken uitdrukking moet een aanwijzertype hebben…
this->grid[i*col + j]->key2
// ^^: this->grid[i*col + j] is not a pointer
this->grid[i*col + j].key2
// ^ use dot to access key2 and key1 too