Toon posts:

[C++] Variable als index van een array? *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik tijdens de declaratie van een array voor de index een variabele waarde gebruiken. Deze variabele waarde is dat afhankelijk van een constate waarde.

Bijvoorbeeld:

#define aantal 2

void main()
{
const aantal_reeks = (aantal*aantal)-aantal;
int reeks[aantal_reeks];
}

nu krijg ik de foumelding dat die indez van die array een constante moet zijn :?

Weet iemand hoe ik dit op moet lossen???

Verwijderd

Kijk voor containers van variabele lengte eens naar de C++ STL (std::vector, std::list, std::deque, etc).

Verwijderd

Op woensdag 20 februari 2002 10:02 schreef Neseirds het volgende:
code:
1
2
3
4
5
6
7
#define aantal 2

void main()
{
   const aantal_reeks = (aantal*aantal)-aantal;
   int reeks[aantal_reeks];
}
Ik ben geen C++-er maar is volgende code niet beter?
code:
1
2
3
4
5
6
#define aantal 2

void main()
{
   int reeks[aantal*(--aantal)];
}

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

je kan in C niet runtime de grootte van een array bepalen :) dus de hint van Sneech moet je gebruiken :)

Doet iets met Cloud (MS/IBM)


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:46
Of malloc....

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:53
In C++ kun je at-runtime de grootte van uw array bepalen door de new functie:
code:
1
2
int[] arr;
arr = new int[5];

https://fgheysels.github.io/


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:13
Onder gcc (C compiler) en g++ (C++ compiler) werkt het prima (behalve dat je nog even het type van 'aantal_reeks' moet specificeren). Het is dus waarschijnlijk een compiler probleem. Ik vrees dat de C/C++ standaard niet zoveel zegt over het invoeren van constant variables als constants in de broncode. Waarschijnlijk is het dus een keuze geweest van de makers van jou compiler om het niet te ondersteunen (het kost immers wat meer moeite). Ik meen me te herinneren dat Microsoft's C++ compiler er ook last van had.

Een mogelijke oplossing, behalve een andere compiler gebruiken, is aantal_reeks niet als variabele maar als met behulp van een precompiler directive te definiëren:

#define aantal_reeks ((int)(aantal*aantal-aantal))

Het enige nadeel hiervan is dat je het niet als lvalue kan gebruiken of een pointer naar de 'variabele' maken, maar aangezien het een constante was, maakt dat hoogstwaarschijnlijk toch niet uit.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Wat je probeert is bijna legaal in C++, maar illegaal in
C. Om er legaal C++ van te maken moet je "const" veranderen in "const int"; "void main" in "int main" en als C++ compileren.

Om het in C werkend te krijgen moet je aantal_reeks als macro definieren. De hele expressie moet dan wel tussen (haakjes). Dit is dan natuurlijk geen variabele.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1