[BCB] structures in functies werken niet fatsoenlijk

Pagina: 1
Acties:
  • 245 views

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Hallo,

Op het moment zijn we op school bezig met het bouwen van een artikelen registratie programma.
Dit is de struct
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef struct
{
TGEVULD   vol;              // Als deze plaats in het artikel gevuld is true
TNAAM           naam;                   // naam van het artikel
TCODE           code;                   // code van het artikel
TVOORRAAD       aantalart;        // aantal dat in voorrad is van dit artikel
TINKOOPPRIJS        inkprijs;       // inkoopprijs van dit artikel
TVERKOOPPRIJS       verkprijs;  // verkoopprijs van dit artikel
TAANBIEDING     aanbieding;     // artikel is een aanbieding (ja/nee)=
TCATEGORIE      categorie;      // categorie van dit artikel
TAANTALVERV     aantalverv;     // aantal vervangers voor dit artikel
TVERVANGERS     vervangers;     // array dat de code van de vervangers bevat
} TARTIKEL;

//lijst met artikelen maximaal Max_artikel;

typedef TARTIKEL TARTIKELLIJST[MAX_ARTIKEL];
TARTIKELLIJST art_lijst;

Als ik nu onder een button zet;
art_lijst[i].vol = false; dan werkt dit perfect.
Zet ik dit echter in een functie dan is dit fout en moet het:
art_lijst[i]->vol = false;
art_lijst is een array van 30 plaatsen echter in functies geeft hij op art_lijst[24]->vol als waarde ???? ipv een bool :s
Waar zit het probleem?:S

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


Verwijderd

Het hangt er nogal van af hoe je de struct gebruikt in je functie. Als je 'm by value meegeeft als parameter moet je art_lijst[i].vol gebruiken. Als je 'm bij reference meegeeft (een pointer naar je struct dus) moet je art_lijst[i]->vol gebruiken. Meestal wil je dit laatste, aangezien er anders een kopie van de struct op de stack gezet wordt, by ref is efficiënter.

Waarom je ????? terugkrijgt weet ik ook niet, initialiseer je de waarden in je struct wel?

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
hoe bedoel je ;initialiseer je de waarden in je struct wel?

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


Verwijderd

Wanneer je in C (en in meerdere programmeertalen zal het zo zijn) je variabelen niet initialiseert, bijv.
C:
1
2
3
4
int i;
bool vol;
string s;
// etc. 

kan je variable in principe een heel andere waarde bevatten dan je zou verwachten, maar dat hoeft niet zo te zijn. Ofwel probeer al je structmembers eens te initialiseren, het zou kunnen helpen. Zoals:
C:
1
2
3
4
int i = 0;
bool vol = false;
string s = "";
// etc.

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
oké, maar dan blijft het gek dat ik in functies bij lijst[i > 24]->vol = true een kei harde foutmelding krijg en de waarde van een bool ???? dan zit er toch wel meer fout lijkt me zo?

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


Verwijderd

Mja als je nu eens precies post wat er fout gaat... wat is bijv. "een keiharde foutmelding"?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:13

Creepy

Tactical Espionage Splatterer

Als je direct een variabele aanmaakt van je struct dan zul je de members hiervan met een . moeten benaderen. Als je in je functie een pointer naar een struct doorgeeft dan zul je eerst de pointer moeten dereferencen voordat je bij de member kan. Dit kan m.b.v. haakjes en een punt. Om nu niet steeds de haakjes en een punt te moeten gebruiken is daar een shortcut voor gemaakt, namelijk de ->.

No offence maar als dit je probleem is en het verschil tussen . en -> niet snapt dan wordt het tijd je boek er nog eens bij te pakken of eens goed naar een C++ tutorial te kijken want dit is nogal basic C++ kennis.

[ Voor 21% gewijzigd door Creepy op 05-06-2008 11:51 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
@ mod,
jah dat weet ik ondertussen wel.
Maar een kei harde foutmelding is een rood rondje met een wit kruis!:P
ik kan de exacte foutmelding op het moment niet terug zien, maar er zat iets in met vcl60
Mijn borland doet sowiso enorm gek! hij geeft nu en foutmelding bij
// pre: -
Dat compiled hij toch helemaal niet !??
Afbeeldingslocatie: http://img125.imageshack.us/img125/9013/softwarewm6.th.jpg

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:13

Creepy

Tactical Espionage Splatterer

In je screenshots zie ik alleen breakpoints (rood rondje met een groen vinkje) staan en geen foutmelding?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:26
Ik denk hé bart0l0meus, dat dit topic nog weinig zin heeft ....
Zoals Creepy al zei, is het verschil tussen . & -> toch wel basic c++ kennis; als je dan ook nog eens breakpoints als errors aanziet, dan groeit mijn vermoeden alleen maar dat je toch eerst eens een tutorial , boek en deftige cursus moet doornemen / volgen.

[ Voor 46% gewijzigd door whoami op 05-06-2008 23:13 ]

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.