🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #8691

Re: Nog één maal uit de nood helpen.

#8691
From: Slayerke
Date: Tue, 11 Jun 2002 15:46
108 lines
4033 bytes
Christof Laeremans wrote:

> Hallo,
> 
> "Hier is die C++ zaag weer" ;)
> 
> Hier volgt de code van een eenvoudig programma dat gebruikt maakt van een
> lijst van objecten. (Copy Constructor zit er nog niet bij omdat het nog
> niet al te duidelijk is)
> 
> Wie kan me zeggen wat er fout loopt. Want als ik volgende invoer geef
> 
> Het klantnummer: 1
> De initialen: a
> Het klantnummer: 2
> De initialen: b
> Het klantnummer: 3
> De initialen: c
> Het klantnummer: 4
> De initialen: d
> Het klantnummer: 5
> De initialen: e
> 
> Dan krijg ik deze uitvoer op mijn scherm
> Klanten uit de lijst halen
> 5e
> 5e
> 5e
> 5e
> 5e
> 
> Hij blijkt alleen maar het laaste element te poppen


<knip>

De fout zit in je main:
> int main()
> {
>     Queu Klanten;
>     Persoon Klant;
>     Persoon *Klnt;
>     
>     Klnt = &Klant; // Hier zet je Klnt=&Klant
>     
>     int nummer;
>     char initialen[3];
>     int i = 0;
>     
>     
>     while(i < 5)
>     {
>         Klnt = NULL; // Hier zet je Klnt terug=NULL
>         cout<<"Het klantnummer: ";
>         cin>>nummer;
>         cin.get();
>         Klant.setNummer(nummer);
>         cout<<"De initialen: ";
>         cin.get(initialen,3);
>         cin.get();
>         Klant.setInitialen(initialen); 
>         //Hier heb je Klant gevuld, MAAR Klnt is nog steeds NULL
>         //klant toevoegen aan de lijst
>         Klanten.push(Klnt); //Je pushed Klnt op de list (dus NULL)
>     
>         
>         i++;
>     }
>     //Op het einde van de lus is de variabele Klant dus = 5e
>     cout<<"Klanten uit de lijst halen"<<endl;
>     
>     
>     
>     while(Klanten.nogElementen())
>     {
>     
>         Klnt = Klanten.pop();  //je popped Klnt
>         cout<<Klant.getNummer();  //maar schrijft Klant uit
        //wat maar best is, anders was je proggy gecrasht
>         cout<<Klant.getInitialen();
>         Klnt = NULL;
>         
>         cout<<endl;
>         
>     }
>     
>     cout<<"bestaat de lijst ja of neen !";
>     while(Klanten.nogElementen())
>     {
>         cout<<"ja"<<endl;
>     }
>     
> }

Je main is volledig foutief, je bedoeling is waarschijnlijk:
Klnt=&Klant, dan Klant vullen en dan die Klant pushen en in de volgende 
iteratie terug DIEZELFDE Klant opvullen. Die methode gaat ook niet werken 
(er gaat ook 5x 5e uitgeschreven worden), maar dan is het omdat je 5x een 
pointer naar dezelfde Klant variabele pushed. 
Eigenlijk moet je bij het vullen 5x een nieuwe Klant maken (Klnt=new 
Klant...), en dan bij het poppen, niet Klant.getNummer uitschijven maar 
Klnt->getNummer() enz..
En dan op het einde van die pop-iteratie niet vergeten je gepopte pointer te 
deleten :-)
Die variabele Klant heb jet nergens voor nodig.
-- 
Groeten,
Slayerke
Technical Details
Message-ID: <ZWoN8.27371$ud.3564@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!supernews.com!news-xfer2.newshosting.com!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!t-online.de!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <B92BDED1.684E%christof_laeremans@hotmail.com>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,d75aeeec4e01f9d8
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-06-11 08:46:06 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!supernews.com!news-xfer2.newshosting.com!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!t-online.de!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: Slayerke <slayerkenospammer@slayerke.co.uk>
Subject: Re: Nog één maal uit de nood helpen.
Newsgroups: be.comp.programming
Reply-To: slayerkenospammer@slayerke.co.uk
References: <B92BDED1.684E%christof_laeremans@hotmail.com>
Lines: 108
User-Agent: KNode/0.7.1
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8Bit
Message-ID: <ZWoN8.27371$ud.3564@afrodite.telenet-ops.be>
Date: Tue, 11 Jun 2002 15:46:01 GMT
NNTP-Posting-Host: 213.224.101.34
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1023810361 213.224.101.34 (Tue, 11 Jun 2002 17:46:01 MET DST)
NNTP-Posting-Date: Tue, 11 Jun 2002 17:46:01 MET DST
Organization: Telenet Internet