“Fout: uitdrukking moet een aanwijzertype hebben” bij gebruik van het trefwoord “this”

Dus ik heb een bovenliggende klasse gemaakt, die ik Parentzal noemen die een Square*rasterlidvariabele heeft. De rastervariabele is een verwijzing naar een groot aantal vierkanten, die keylidvariabelen bevatten. (Zie dit project als een hashtabel) Het probleem is dat ik een functie maak in de klasse Parentdie de belangrijkste variabelen in de array Squarebewerkt, 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 thisen 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 Squareen niet een Square*en voor een Square-object moet u gebruik de . operatoren niet de -> operator.


Antwoord 2, autoriteit 20%

Ik denk dat this->gridvan 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

Other episodes