Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

array van structs

Pagina: 1
Acties:

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22-11 22:49
Ben hier nu al twee dagen mee bezig, en ik kom er maar niet uit..

Ik moet om data op te slaan een onbepaalde hoeveelheid structs aanmaken in mijn programma (net zoveel structs als dat ik data inlees uit een file). Ik wil dus een array van pointers naar alle structs maken om alles te adresseren en die array met malloc de juiste grootte geven.

voorbeeld :

code:
1
2
3
4
5
6
7
8
9
10
11
//een simpele struct
struct foo{
  int bla;
}

foo bla;  /* een pointer naar een struct foo die bla heet OK */
foo bla2[10]; /*een array van 10 structs, de array heet bla2 OK */
 
int n; /* aantal structs dat ik wil aanmaken */
foo *bar;  /* een pointer naar een pointer naar een struct */
bar = malloc (sizeof(foo) * n); /* alloceer genoeg geheugen voor n pointers naar structs van het type foo */


maar bij het compileren van dat laatste gaat het fout :

code:
1
invalid conversion from 'void*' to 'foo*'


Wat bedoelt mijn compiler (mingw) nu precies?

/me heeft eindelijk ook een icoontje.. woef.. boeien..


  • Dwarrelegel
  • Registratie: Februari 2009
  • Laatst online: 10-11 12:28
Hoe compileer je dit? Met een C++ compiler?
Zo ja maak dan van de laatste regel:
bar = (foo*)malloc (sizeof(foo) * n);

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22-11 22:49
Ja, met mingw c++.

code:
1
foo *bar = (foo*)malloc(aantal*sizeof());


werkt inderdaad wel... snotverdrie, en ik had echt al zo'n beetje alle combinaties geprobeerd die ik maar kon verzinnen....

Nu nog uitzoeken hoe ik dan al die structs moet creeëren...

[ Voor 13% gewijzigd door WVL_KsZeN op 30-04-2013 13:36 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


  • Dwarrelegel
  • Registratie: Februari 2009
  • Laatst online: 10-11 12:28
Trouwens, als je in c schrijft waarom compileer je dan met een C++ compiler?
Of:
Als je in c++ schrijft waarom gebruik je dan malloc?

Ergens gaat iets fout ;)

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22-11 22:49
Ehr... altijd blijven hangen in C :D Ik zie dat ik new moet gebruiken.

Dat wordt dus iets als

code:
1
foo *bar = new foo(n);

maar dan krijg ik weer andere fouten bij het compileren :

code:
1
no matching function for call to 'foo::foo(int&)'


volgens mij omdat new een constructor verwacht en malloc niet? met toevoegen van een constructor nog steeds dezelfde fout..

[ Voor 8% gewijzigd door WVL_KsZeN op 30-04-2013 13:51 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


  • Dwarrelegel
  • Registratie: Februari 2009
  • Laatst online: 10-11 12:28
Ik denk dat het verstandig is om even c++ tutorials te gaan volgen over strucs en new.
Tot nu toe zijn je vragen namelijk simpele dingen die je via google zelf makkelijk kan vinden, en goed gedocumenteerd zijn.

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 20:57

Matis

Rubber Rocket

Als je de basisbeginselen van C al niet onder de knie hebt, wens ik je veel sterkte met het doorgronden van C++.
WVL_KsZeN schreef op dinsdag 30 april 2013 @ 13:47:
Ehr... altijd blijven hangen in C :D Ik zie dat ik new moet gebruiken.
Ik weet niet hoe lang / veel je in C geprogrammeerd hebt, maar ook daar krijg je exact dezelfde foutmelding als je malloc doet op een struct.
Bovenstaande in ieder geval met gcc op een Ubuntu-machine

[ Voor 7% gewijzigd door Matis op 30-04-2013 19:00 ]

If money talks then I'm a mime
If time is money then I'm out of time


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 13:12
Overigens klopt van de commentaren op regels 6,10 en 11 niet veel, wat een indicatie kan zijn dat het kwartje mbt arrays en pointers nog niet helemaal gevallen is.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1