Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 18-05-2003, 12:36
aldi - PUNK
aldi - PUNK is offline
hallo,
ik heb een probleempje, ik ben bezig met c++ te leren uit een boek maar ik zit vast;(. CLASSES.
nu hebben ze een (stukje van een)opgaven:

Lees van af het totsenbord naam en leeftijd in van 10 personen.
sla dit op in een array met 10 klasse objecten. voor elke naam wordt een beperkte ruimte gereserveert(31 bytes met 0karacter), dus namen langer dan 30, worden afgekapt.

nu had ik dit gemaakt:

//opdr 6.1

#include<iostream.h>

class persoon {
public:
persoon(char pnaam[30]="...",int pleeftijd=0); //constructor
~persoon(){} //deconstructor
void pprint()const;

private:
char *naam;
int leeftijd;
};

persoon::persoon(char pnaam[30],int pleeftijd) //initialisatie
{
naam=pnaam;
leeftijd=pleeftijd;
}


void persoon::pprint() const
{
cout<<naam<<' '<<leeftijd<<endl;
}




int main()
{
persoon x[3];
char naam[30];
int leeftijd;

for(int i=0;i<3;i++)
{
cout<<i+1<<" Naam: ";cin>>naam;
cout<<" Leeftijd: ";cin>>leeftijd;
x[i]=persoon(naam,leeftijd);
}

for(i=0;i<3;i++)
{
x[i].pprint();
}
return 0;
}

ik weet dat de fout bij, de pointer zit. maar het boek is nogal vaag over die dingen dus zou iemand mij ff kunnen helpen???!!
__________________
Punk is VERZET
Met citaat reageren
Advertentie
Oud 18-05-2003, 12:56
niemand
Avatar van niemand
niemand is offline
nou moet ik zeggen dat ik geen ervaring heb met de manier waarop jij data van en naar de tty stuurt maar iets waar ik aan dacht is: stel dat je een naam van 31 tekens invoert, ga je er dan vanuit dat dat afgekapt word omdat je array maar 30 elementen groot is?
als dat namelijk zo is dan zal het prog waarschijnlijk segfaulten bij 31 tekens wat weer een deur opent voor mogelijke exploits
Met citaat reageren
Oud 18-05-2003, 14:18
McMotion
Avatar van McMotion
McMotion is offline
geef dan in ieder geval de foutmelding ff... ik ga het programma niet zelf uitvoeren.. geen zin in
__________________
[AvatarDraw(c) v1.0 is uit de lucht (en per ongeluk van mijn hardeschijf verdwenen tijdens het weggooien ervan
Met citaat reageren
Oud 19-05-2003, 08:09
Verwijderd
Zo op de eerste blik ligt het denk ik aan de lifetime van pnaam.

[edit]
Dat schijnt niet eens het probleem te zijn :/ Ik word ook dement

Het echte probleem, waar normaal niemand bij stilstaat, zit hier:

Code:
for(i=0;i<3;i++)
{
x[i].pprint();
}
De variabele i is onbekend. Zoiets meldt je compiler toch gewoon? Maak er ff het volgende van:

Code:
for(int i=0;i<3;i++) x[i].pprint();

Laatst gewijzigd op 19-05-2003 om 08:17.
Met citaat reageren
Oud 19-05-2003, 14:18
aldi - PUNK
aldi - PUNK is offline
kerels, i is niet het probleem; i is wel bekent! kijk maar in mn code ik heb i in de eerste [for next loop] al gedeclareert. zou ik m nog ns declareren dan zou ik een foutmelding krijgen.

het ligt inderdaad aan die pointer, wat weet ik nog niet dat wou ik nou net ff weten. hij zou elke naam moeten opslaan en dat doet ie niet. Hij slaat alleen de laatste ingevoerde naam op en kent die aan de rest. volgensmij is n klein foutje ergens. ik krijgtrouwens geen foutmeldingen.
__________________
Punk is VERZET

Laatst gewijzigd op 19-05-2003 om 14:43.
Met citaat reageren
Oud 19-05-2003, 14:49
Verwijderd
Citaat:
aldi - PUNK schreef op 19-05-2003 @ 15:18:
kerels, i is niet het probleem; i is wel bekent! kijk maar in mn code ik heb i in de eerste [for next loop] al gedeclareert. zou ik m nog ns declareren dan zou ik een foutmelding krijgen.
De scope van i ligt binnen de for-loop. Na die loop kent hij i niet meer.

Citaat:
het ligt inderdaad aan die pointer, wat weet ik nog niet dat wou ik nou net ff weten. hij zou elke naam moeten opslaan en dat doet ie niet. Hij slaat alleen de laatste ingevoerde naam op en kent die aan de rest. volgensmij is n klein foutje ergens. ik krijgtrouwens geen foutmeldingen.
Dan is je compiler niet ANSI-compliant.

Maar het probleem is duidelijk.

'naam=pnaam' wijst aan de pointer 'naam' het geheugen adres van de variabele 'pnaam' toe. Deze heeft in de machinecode een vaste geheugenplaats gekregen, ter optimalisatie van de uitvoering. Hierdoor overschrijf je steeds hetzelfde adres, en zijn alle namen gelijk.

Leuk he?

Snelle oplossing: vervang de pointer gewoon door een array en werk met strcpy.

Minder snelle oplossing: werk met 'new' en 'delete' om je pointers naar apart gereserveerde geheugenplaatsen te laten wijzen.

Succes!
Met citaat reageren
Oud 19-05-2003, 14:54
aldi - PUNK
aldi - PUNK is offline
yo bedankt, en als ik voor de tweede i een int zet krijg ik een error:
D:\Cpp\6_1\main.cpp(40) : see declaration of 'i'

en laat ik t weg doet i t gewoon. ligt misschien aande compiler.
__________________
Punk is VERZET
Met citaat reageren
Oud 19-05-2003, 14:58
aldi - PUNK
aldi - PUNK is offline
hier is ie af(nouja mn probleempje gefixed.):

//opdr 6.1

#include<iostream.h>
#include<string.h>

class persoon {
public:
persoon(char naamPersoon[30]="...",int pleeftijd=0); //constructor
~persoon(){} //deconstructor
void pprint()const;

private:
char naam[30];
int leeftijd;
};

persoon::persoon(char naamPersoon[30],int pleeftijd) //initialisatie
{

strcpy(naam,naamPersoon);
leeftijd=pleeftijd;
}


void persoon::pprint() const
{
cout<<naam<<' '<<leeftijd<<endl;
}




int main()
{
persoon x[3];
char naam[30];
int leeftijd;


for(int i=0;i<3;i++)
{
cout<<i+1<<" Naam: ";cin>>naam;
cout<<" Leeftijd: ";cin>>leeftijd;
x[i]=persoon(naam,leeftijd);
}

for(i=0;i<3;i++)
{
x[i].pprint();
}
return 0;
}
__________________
Punk is VERZET
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar

Soortgelijke topics
Forum Topic Reacties Laatste bericht
Software & Hardware [C++] Abstracte klasses
Jordi
5 23-02-2007 12:37
Software & Hardware [C++] class/struct type in een var opslaan
deathz0rz
10 21-02-2004 03:02
Software & Hardware [C++]3 losse modules linken => linking error
Dr HenDre
7 30-12-2003 18:54
Software & Hardware [C++Buider] Programma werkend krijgen lukt niet.
langejongen
5 24-12-2003 19:10
Software & Hardware [C++] Class, probleempje(alweer;))
aldi - PUNK
18 24-07-2003 15:33
Software & Hardware [C++] Classes variable
Talon
5 27-04-2003 19:01


Alle tijden zijn GMT +1. Het is nu 06:46.