[c++] Arrays en structures

Pagina: 1
Acties:

  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
Ik zit echt helemaal vast, heb op internet al allemaal pagina's gelezen over arrays en structures en het staat er allemaal zo 'makkelijk' beschreven, maar toch werkt het bij mij niet... Het gaat om het volgende probleem...

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <fstream> 
#include <iostream>
using namespace std;

const char *bestand = "db.dat";

struct Auto {
  int verknr;
  char verkadres[60];
  char verkwpl[40];
  char merk[40];
  char kleur[40];
  char verknaam[40];
  char indherkomst;
  char type[40];
  int bouwjaar;
  int prijs;
  int i;
  };


bool LoadDB(Auto *rec) {
  ifstream invoer(bestand, ios_base::in | ios_base::binary);
  
  if (!invoer.is_open())
    return false;

  invoer.read((char*)rec, sizeof(Auto));
  invoer.close();

  return true;
}

bool SaveDB(Auto *rec) {
  ofstream uitvoer(bestand, ios_base::out | ios_base::binary | ios_base::trunc);
  if (!uitvoer.is_open())
    return false;
    
  uitvoer.write((const char*)rec, sizeof(Auto));
  uitvoer.close();


  return true;
}

int main() {

 
  Auto rec;
  if (LoadDB(&rec)) {

    cout << "Het volgende staat in de database...\n";
    cout << "Merk = " << rec.merk << endl;
    cout << "Type = " << rec.type << endl;
    cout << "Kleur = " << rec.kleur << endl;
    cout << "Nummer verkoper = " << rec.verknr << endl;
    cout << "Naam verkoper = " << rec.verknaam << endl;
    cout << "Adres verkoper = " << rec.verkadres << endl;
    cout << "Woonplaats verkoper = " << rec.verkwpl << endl;
    cout << "Herkomst auto = " << rec.indherkomst << endl;
    cout << "Bouwjaar = " << rec.bouwjaar << endl;
    cout << "Prijs = " << rec.prijs << endl;
    cout << endl;
    
  }


  cout << "Voer gegevens in de database...\n";
  cout << "Merk: ";
  cin.getline(rec.merk, 40);
  
  cout << "Type: ";
  cin.getline(rec.type, 40);
  
  cout << "Kleur: ";
  cin.getline(rec.kleur, 40);
  
  cout << "Nummer verkoper: ";
  cin >> rec.verknr;
  cin.get();
  
  cout << "Naam verkoper: ";
  cin.getline(rec.verknaam, 40);
  
  cout << "Adres verkoper: ";
  cin.getline(rec.verkadres, 60);
  
  cout << "Woonplaats verkoper: ";
  cin.getline(rec.verkwpl, 40);
  
  cout << "Herkomst auto: ";
  rec.indherkomst = cin.get();
  
  cout << "Bouwjaar: ";
  cin >> rec.bouwjaar;
  cin.get();
  
  cout << "Prijs: ";
  cin >> rec.prijs;
  cin.get();

  
  if (SaveDB(&rec))
    cout << "\nDatabase opgeslagen!\n";
  else
    cout << "\nKon database niet opslaan!\n";

  cout << "\n[druk op enter]";  
  cin.get();

  return 0;
}


Nu wordt er dus 1x om de gegevens van een autoverkoper gevraagd en die word ook 1x weergegeven. De bedoeling is dat er meerdere verkopers ingevoerd moeten worden... Die gegevens moeten dus in een apart bestand weggeschreven worden. Normaal zou je gewoon een array kunnen gebruiken en dan met een for loop zoveel dingen in kunnen voeren als je zelf wilt. Nu staat bijv. in mijn boek en ook op veel pagina's op het internet dat je door middel van (bijv.) rec[i].merk meerdere keren de structure kunt gebruiken. dus dan krijg je rec[0].merk, rec[1].merk. rec[2].merk etc. als ik dus rec[i] gebruik krijg in een undeclared identifier terwijl ik i toch echt als int i = 0 heb gedeclared (en natuurlijk met een for loop (bijv. for(i = 0; i < aantal; i++) waarbij aantal dan bijv. 3 is) de i steeds laten verhogen. Ik heb ook al geprobeerd om alle recs aan te passen naar rec[0], maar zelfs dat mag al niet.

De vraag is, zo moet het blijkbaar dus niet, maar hoe dan wel? (ben al een behoorlijk lange tijd bezig :'() (ik hoef maar een hele kleine hint :D)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-08 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Duh, je definieert geen array van Auto's, maar gewoon 1 auto:
C++:
1
  Auto rec; 


en als dat niet in je boek staat dan kun je 'm beter in de prullenbak mieteren, want dan heb je er niets aan :)

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.


  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
.oisyn schreef op 09 October 2003 @ 16:02:
Duh, je definieert geen array van Auto's, maar gewoon 1 auto:
C++:
1
  Auto rec; 


en als dat niet in je boek staat dan kun je 'm beter in de prullenbak mieteren, want dan heb je er niets aan :)
Ja, maar die pas ik dan ook aan naar rec[i] (zo staat dat in mijn boek)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Heb je die rec wel als een array gedeclareerd?

Post eens de code (enkel de relevante code dus, niet zo'n lap zoals in je TS), waarin je die array in een for-loop gaat gaan opvullen.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Xof schreef op 09 October 2003 @ 16:03:
[...]


Ja, maar die pas ik dan ook aan naar rec[i] (zo staat dat in mijn boek)
Ow, je kunt dus een appel naar een peer omtoveren?

Definieer die rec eens zo:
code:
1
Auto rec[5];

Dan heb je een array waar je 5 auto's kunt in stoppen.

[ Voor 20% gewijzigd door whoami op 09-10-2003 16:04 ]

https://fgheysels.github.io/


  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
Hebben jullie mijn tekst wel gelezen? ;)

Dit is mijn originele code.. als ik bijv.

C++:
1
2
3
4
5
6
7
const int aantal = 3;
for (int i = 0; i < aantal; i++)
{
Auto rec[i];

etc.
}


dat lukt dat niet..

5 heb ik ook al geprobeerd...

[ Voor 14% gewijzigd door Xof op 09-10-2003 16:07 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-08 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Xof schreef op 09 October 2003 @ 16:03:
[...]


Ja, maar die pas ik dan ook aan naar rec[i] (zo staat dat in mijn boek)
En wat is i dan? Het moet een compiletile constant zijn. Dit is bijvoorbeeld wel goed:
C++:
1
Auto rec[100];  // array van 100 Autos


Dus A) je boek is ongelooflijk slecht, of B) jij leest niet goed :)

[ Voor 12% gewijzigd door .oisyn op 09-10-2003 16:10 ]

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.


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 23:00
Je kunt zo geen array declareren in C(++)... Een array moet een vaste grootte
hebben.. Anders zul je 'new' moeten gebruiken.... :)

Mmmm.. te laat.. .oisyn was me voor

[ Voor 18% gewijzigd door Rowwan op 09-10-2003 16:10 ]


  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
Zo slecht zal het boek niet zijn.. Aan de slag met c++
Maar ik heb nu dus overal [5] achtergezet, zoals ik al zei, dat had ik al gedaan, maar dan krijg ik dus cannot convert

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Xof schreef op 09 October 2003 @ 16:06:
Hebben jullie mijn tekst wel gelezen? ;)

Dit is mijn originele code.. als ik bijv.
Waarom post je dan die lap code, waar wij toch niets aan hebben, en post je gewoon niet enkel de relevante code?

Nogmaals: heb je die rec wel als een array gedefinieerd.

https://fgheysels.github.io/


  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Auto rec[5];
const int aantal = 5; 
for (int i = 0; i < aantal; i++)
{
  if (LoadDB(&rec[i])) {

    cout << "Merk = " << rec[i].merk << endl;
    etc.
}

for (int i = 0; i < aantal; i++)
{
  cout << "Voer gegevens in de database...\n";
  cout << "Merk: ";
  cin.getline(rec[i].merk, 40);

etc.

if (SaveDB(&rec[i]))
}


even in het kort wat ik bijv. gewijzigd heb (is dus niet de volledige code) maar dat kan dus niet..

Zoals je in mijn code ziet.. JA ik heb het als een array gedefineerd.

[ Voor 30% gewijzigd door Xof op 09-10-2003 16:22 ]


  • frankvdtillaart
  • Registratie: November 2000
  • Laatst online: 24-05 07:42
moet
code:
1
Auto rec;

niet dit zijn:
code:
1
Auto &rec;


Aangezien je deze ook als pointer meestuurt in je procedures e.d. ... en als 't fout is: sorry, lang geleden dat ik heb ge-progt.

[ Voor 49% gewijzigd door frankvdtillaart op 09-10-2003 16:24 ]

Happy Blessings <3


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Waar krijg je die 'cannot convert' errors?
Op de LoadDB en SaveDB methods?

Weet je eigenlijk hoe je een array naar een functie moet passen?

[ Voor 32% gewijzigd door whoami op 09-10-2003 16:24 ]

https://fgheysels.github.io/


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 21-08 13:30

BoAC

Memento mori

Foutje...

[ Voor 97% gewijzigd door BoAC op 09-10-2003 16:29 ]


  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
whoami schreef op 09 October 2003 @ 16:23:
Waar krijg je die 'cannot convert' errors?
Op de LoadDB en SaveDB methods?

Weet je eigenlijk hoe je een array naar een functie moet passen?
ja dat weet ik, maar die cannot convert errors krijg ik nu niet meer, nu ik die 5 erin heb staan krijg ik een parse error op regel 119 en dat is de laatste regel, dus die parse error is moeilijk te vinden :(

  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
whoami schreef op 09 October 2003 @ 16:23:
Waar krijg je die 'cannot convert' errors?
Op de LoadDB en SaveDB methods?

Weet je eigenlijk hoe je een array naar een functie moet passen?
Als ik dat doe dan krijg ik die cannot convert error weer.. en ik krijg die idd bij loaddb en savedb

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Weet je wat je doet, probeer eerst eens die array gewoon op te vullen zonder dat je al met die LoadDB functies enzo aan de slag gaat.

https://fgheysels.github.io/


  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
whoami schreef op 09 October 2003 @ 16:36:
Weet je wat je doet, probeer eerst eens die array gewoon op te vullen zonder dat je al met die LoadDB functies enzo aan de slag gaat.
hmm ja misschien wel zo handig en dan die load en save functies er omheen bouwen als het werkt :)

Edit: hmm nu weet ik ook gelijk waar de fout zit :D
Ik heb dus de load en save weggehaald en het gewoon op het scherm laten weergeven.. en je raad het al, dan doet die het wel.. nouja dan weet ik iig dat het probleem daarin zit :D

[ Voor 26% gewijzigd door Xof op 09-10-2003 16:47 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Xof schreef op 09 oktober 2003 @ 16:42:
[...]


Edit: hmm nu weet ik ook gelijk waar de fout zit :D
Ik heb dus de load en save weggehaald en het gewoon op het scherm laten weergeven.. en je raad het al, dan doet die het wel.. nouja dan weet ik iig dat het probleem daarin zit :D
:z
Wat heb ik je al een aantal replies geleden proberen diets te maken?

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Xof schreef op 09 October 2003 @ 16:28:
[...]


Als ik dat doe dan krijg ik die cannot convert error weer.. en ik krijg die idd bij loaddb en savedb
Kunnen we even noteren voor de volgende keer dat je de HELE error meldt, en het regelnummer waarin hij optreedt? Met 'convert error' kunnen we toch niets?!? :? :/

Cannot convert from 'char*' to 'Auto*' of zo snap ik tenminste.

Professionele website nodig?


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
RedSoniq schreef op 09 oktober 2003 @ 16:23:
moet
code:
1
Auto rec;

niet dit zijn:
code:
1
Auto &rec;
Nee. Auto &rec; is illegaal. Het lijkt op een reference, maar een reference moet altijd naar een object wijzen. Dat zou dus Auto& rec = ... moeten worden. Sowieso is het hier volledig onzinnig.

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


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
Moet je geen Array van 5 pointers naar auto's definieren ?
zoals
C++:
1
Auto* autos[5];


En daarna

C++:
1
auto[i] = &rec;

[ Voor 21% gewijzigd door Feyd-Rautha op 09-10-2003 18:05 ]

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Feyd-Rautha schreef op 09 October 2003 @ 18:03:
Moet je geen Array van 5 pointers naar auto's definieren ?
Nee.
Waarom zou je dat moeten doen?

https://fgheysels.github.io/


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Hehe, ik zou em geen auto noemen :) ( Syntax highlighting is een blessing ;) )

[ Voor 12% gewijzigd door farlane op 09-10-2003 21:43 ]

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.


  • Xof
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:40
curry684 schreef op 09 October 2003 @ 17:08:
[...]

Kunnen we even noteren voor de volgende keer dat je de HELE error meldt, en het regelnummer waarin hij optreedt? Met 'convert error' kunnen we toch niets?!? :? :/

Cannot convert from 'char*' to 'Auto*' of zo snap ik tenminste.
Ja heb je gelijk in.. nu ik erover nadenk best stom idd :)
Maar op een gegeven moment had ik die error eruit en gaf hij een error aan op de laatste regel..

Verwijderd

Feyd-Rautha: wat jij doet niet altijd veilig:

C++:
1
2
3
4
5
6
7
Auto * autos[5];

void CreateAuto()
{
    Auto a;
    autos[1]=&a;
}


na de CreateAuto() is het Auto object a weer van de stack af, en kan alles de geheugenruimte overschrijven.

(met andere woorden: de pointer autos[1] kan naar geheugen verwijzen waar intussen al wat anders is neergezet)

[ Voor 21% gewijzigd door Verwijderd op 11-10-2003 03:42 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
Gebruik van pointers is vaker een bewijs van onkunde dan van iets anders. Bij elk goed gebruik kun je tenminste twee alternatieven aangeven die net niet werken danwel in profiling te langzaam bleken. (praktijk observatie)

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