[win32/c++] 2-dimensionaal array

Pagina: 1
Acties:

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
ik zit met het volgende probleem:

ik heb een class waarbij telkens als er daar een object van wordt aangemaakt, in de constructor ook een tweedimensionaal array wordt aangemaakt, met daarin structs.

nu is het aantal rijen van het array variabel, afhankelijk van een bep. var. en het aantal kolommen is altijd 100.

In de klasse beschrijving in de .h file heb ik het array nu als volgt gedeclareerd:
C++:
1
STRUCT_TYPE **struct_array;

En in de constructor in de .cpp file initialiseer ik het array dan als volgt:
C++:
1
struct_array= new STRUCT_TYPE[n_vertex][100];


ik doe dit niet elke dag natuurlijk, en ik krijg dan ook een foutmelding (' ( expected' ) bij de initialisatie in de constructor.
ik zou echt niet weten wat er fout gaat, heb al een aantal vb bekeken, maar kan er geen wijs uit worden. iemand?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

een new T[x][y] retourneert een object van het type (*T)[y]
Jij gebruikt echter een T**, wat je eigenlijk kunt zien als een pointer naar een pointer, of een array van pointers

Hoe jij het doet zou je het dus zo moeten initialiseren:
C++:
1
2
3
struct_array = new STRUCT_TYPE *[n_vertex];
for (int i = 0; i < n_vertex; i++)
    struct_array[i] = new STRUCT_TYPE[100];


Maar dat is eigenlijk onnodig omdat het aantal "kolommen" vast staat. Je kunt je struct_array dus beter zo declareren
C++:
1
STRUCT_TYPE (*struct_array)[100];


Wat eigenlijk betekent: een pointer naar een array van 100 elementen. En zoals je weet kun je een pointer ook als een array behandelen, dus eigenlijk is het een array van arrays van 100 elementen, precies wat jij wilt :)

Nu kun je gewoon dit doen:
C++:
1
struct_array = new STRUCT_TYPE[n_vertex][100];

[ Voor 3% gewijzigd door .oisyn op 23-05-2003 15:33 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.