[C++] List gevuld in functie werkt niet daarbuiten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik werk met de STL List..
Nu wil ik heel simpel mijn code in functies opdelen, maar dit gaat niet echt lekker
code:
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
void fillList(list<string> lijst)
{
  string line;                                                                  // Maak variabele om regels uit txt file te lezen aan
  
  ifstream tempfile ("temp.txt");                                               // Input filestream voor temp.txt declareren
  if (tempfile.is_open())                                                       // Als temp.txt goed geopened is..
  {
    while (! tempfile.eof() )                                                   // Zolang het einde van de file niet bereikt is..
    {
      getline (tempfile,line);                                                  // Leest een regel uit
      lijst.push_back(line);                                                    // Zet deze regel achteraan in de lijst
    }
    tempfile.close();                                                           // Sluit temp.txt
  }

  else                                                                          // Als temp.txt niet geopend kan worden
  { 
    cout << "Kan het bestand niet openen";                                      // Geef foutmelding
  }
}

int main(int argc, char *argv[])
{ 
list<string> list1;                                                           // Maak lijst aan

  fillList(list1);
}


temp.txt is gewoon aanwezig

lijst.push_back(line) voert hij niet (goed) uit...
Ik krijg geen foutmelding bij het compilen, maar het programma loopt vast zodra ik een waarde uit de lijst opvraag (er staat dus niks in de lijst)

Het gaat fout bij het opdelen in functies, want zonder functies (dus alles in de main geplempt) gaat alles goed.. wat doe ik hier fout?
Het is waarschijnlijk iets heel simpels!

Ik gebruik als compiler DevC++

edit: Excuus titel niet goed aangevuld, mod?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je geeft de list by value mee aan de functie. Deze heeft dus zijn eigen kopie van de (lege) lijst, en de veranderingen die hij eraan maakt zullen niet buiten die functie zichtbaar zijn.
edit: Excuus titel niet goed aangevuld, mod?
Kan gebeuren, maar wellicht handig dat je dan ook meteen een suggestie in je topic zet zodat een mod het alleen nog maar hoeft te copy/pasten ;)

[ Voor 36% gewijzigd door .oisyn op 30-10-2009 00:41 ]

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.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zomaar even wat vragen naar aanleiding van je topicstart: je zegt dat het fout gaat bij het opvragen van een waarde uit de lijst maar je zegt niet wát er fout gaat en hoe je iets uit de lijst probeert op te vragen. Verder geef je aan dat het zonder functies goed gaat, maar je zegt er niet bij hoe de code er dan uitziet. ;) Ik zal overigens ook je titel even afmaken, doe dat de volgende keer zelf asjeblieft. :)

Wat je probleem betreft: moet je niet een reference naar de list doorgeven aan fillList?
edit:
Aan .oisyn's reactie te zien: ja dus. ;)

[ Voor 4% gewijzigd door NMe op 30-10-2009 00:43 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Excuses voor deze minimale uitleg zonder de complete code. Maar dit leek mij voldoende om het probleem uit te leggen. En blijkbaar is dat ook voldoende geweest want dat was inderdaad de fout!

Heb er nu
code:
1
void fillList(list<string> &lijst)
van gemaakt en werkt prima.

Bedankt.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Het was voldoende voor .oisyn en mij om de fout te spotten omdat je fout inderdaad toevallig makkelijk te spotten was. ;) Je uitleg was dus niet voldoende, maar uit de code konden we alsnog opmaken wat je probleem was. Daarbij waren we dus eigenlijk jouw code aan het debuggen, en da's niet helemaal de bedoeling. ;) Het zou dus fijn zijn als je de volgende keer zo uitgebreid mogelijk je probleem beschrijft, daar zul je 9 van de 10 keer zelf ook meer aan hebben. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.