🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #8698

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

#8698
From: Christof Laeremans
Date: Tue, 11 Jun 2002 18:11
170 lines
5422 bytes
On 6/11/02 5:46 PM, in article ZWoN8.27371$ud.3564@afrodite.telenet-ops.be,
"Slayerke" <slayerkenospammer@slayerke.co.uk> wrote:

> 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.

Mensen,

Bedankt om me uit de nood te helpen, de oefening werkt  !

Heb mijn main aangepast naar

int main()
{
    Queu Klanten;
    //Persoon Klant;
    Persoon *Klnt;
    
    
    
    int nummer;
    char initialen[3];
    int i = 0;
    
    
    while(i < 5)
    {
        Klnt = new Persoon; //x maal een nieuwe persoon maken
        cout<<"Het klantnummer: ";
        cin>>nummer;
        cin.get();
        Klnt -> setNummer(nummer); //pointer naar een klasse, om dan de
lidfuncties op te roepen -> gebruiken
        cout<<"De initialen: ";
        cin.get(initialen,3);
        cin.get();
        Klnt -> setInitialen(initialen); //idem
        
        //klant toevoegen aan de lijst
        Klanten.push(Klnt);
    
        i++;
    }
    
    cout<<"Klanten uit de lijst halen"<<endl;
    
    while(Klanten.nogElementen())
    {
    
        Klnt = Klanten.pop();
        cout<<Klnt -> getNummer();
        cout<<Klnt -> getInitialen();
    
        
        cout<<endl;
        
    }
    
    //verwijderen van de pointer die wijst naar de klasse
    delete Klnt;
}

Nogmaals bedankt voor de hulp

Mvg,

Christof Laeremans
Technical Details
Message-ID: <B92C0A0A.68AF%christof_laeremans@hotmail.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-08!supernews.com!news.maxwell.syr.edu!newsfeed.online.be!feed1.news.be.easynet.net!news.be.wanadoo.com!news.wanadoo.be!not-for-mail
References: <B92BDED1.684E%christof_laeremans@hotmail.com> <ZWoN8.27371$ud.3564@afrodite.telenet-ops.be>

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 11:12:11 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-08!supernews.com!news.maxwell.syr.edu!newsfeed.online.be!feed1.news.be.easynet.net!news.be.wanadoo.com!news.wanadoo.be!not-for-mail
From: Christof Laeremans <christof_laeremans@hotmail.com>
Newsgroups: be.comp.programming
Subject: Re: Nog één maal uit de nood helpen.
Date: Tue, 11 Jun 2002 20:11:54 +0200
Organization: Wanadoo Belgium
Lines: 171
Message-ID: <B92C0A0A.68AF%christof_laeremans@hotmail.com>
References: <B92BDED1.684E%christof_laeremans@hotmail.com> <ZWoN8.27371$ud.3564@afrodite.telenet-ops.be>
NNTP-Posting-Host: adsl-80-236-139-88.wanadoo.be
Mime-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
X-Trace: sinclair.be.wanadoo.com 1023819134 1420188 80.236.139.88 (11 Jun 2002 18:12:14 GMT)
X-Complaints-To: abuse@wanadoo.be
NNTP-Posting-Date: Tue, 11 Jun 2002 18:12:14 +0000 (UTC)
User-Agent: Microsoft-Entourage/10.0.0.1309