Wat doe ik fout?

Status
Niet open voor verdere reacties.

Dragonlord

Gebruiker
Lid geworden
26 sep 2006
Berichten
163
Kan iemand meehelpen, wat ik hier fout doe.


Code:
typedef struct 
{ 
char vnaam[20];
char anaam[20];
int leeftijd;
} persoon;

persoon *q, p1; 

int main(int argc, char *argv[])
{
p1->vnaam="Arnold";
p1->anaam="Waterreus";
p1->leeftijd=14;

q.vnaam="Arjan";
q.anaam="Waterreus";
q.leeftijd=16;


printf("\nVoornaam %s\n",p1.vnaam);
printf("\nVoornaam %s\n",p1.anaam);
printf("\nVoornaam %i\n",p1.leeftijd); 


printf("\nVoornaam %s\n",q.vnaam);
printf("\nVoornaam %s\n",q.anaam);
printf("\nVoornaam %i\n",q.leeftijd); 
}


IK kan hem gewoon niet runnen
 
Laatst bewerkt:
Code:
persoon *q, p1;
q is nu een pointer naar een persoon, p1 is een persoon.

Code:
p1->vnaam="Arnold";
p1->anaam="Waterreus";
p1->leeftijd=14;

q.vnaam="Arjan";
q.anaam="Waterreus";
q.leeftijd=16;

p1 is een persoon, en je komt bij zijn members met de '.' operator.
q is een pointer naar een persoon, en je komt bij die persoon zijn members met de '->' operator.

Je hebt het hier dus net omgedraaid :).

Lost dat het op?

(Geef in het vervolg wel de foutmeldingen erbij.)
 
Lost dat het op?

Dat lijkt me niet, gezien dat de pointer helemaal nergens naartoe verwijst en het invullen van de voor- en achternamen op deze manier niet gaan werken. Hij zal meer iets als het onderstaande moeten doen:

[cpp]
persoon *pp = (persoon *)malloc(sizeof(persoon));
strcpy(pp->vnaam, "voornaam");
// ...
free(pp);
[/cpp]
 
p1.vnaam="lelel";
p1......

q = &p;

Dat is genoeg:)

dan kan je cout << q->vnaam "\n"; doen
 
:rolleyes:

Zoals ik al zei: het invullen van de voor- en achternaam gaat op die manier niet werken ;)

Ja sorry allemaal, maar ik lette even niet daarop

rightthing:

Code:
struct Moi
{ 
	std::string vnaam; // wat je liever wilt, dit of een pointer
	char* anaam;
	int leeftijd;
} *q, p1; 

int main(int argc, char *argv[])
{
	p1.vnaam = "Arnold";
	p1.anaam = "Waterreus";
	p1.leeftijd=14;

	q = &p1;
 
Ja sorry allemaal, maar ik lette even niet daarop

rightthing:

Als je naar de code van de TS kijkt dan lijkt het me vrij logisch dat hij in C programmeert, en niet in C++. Dus het gebruik van std::string (en std::cout zoals je eerder voorstelde) is helemaal niet van toepassing. Verder heeft het opgeven van een vaste grootte bij de velden vnaam en anaam het voordeel dat de grootte bekend is en daardoor de structs op een eenvoudige manier kunt wegschrijven (bij een char-pointer is dat niet het geval).

[cpp]
typedef struct {
char vnaam[20];
char anaam[20];
int leeftijd;
} *pPersoon, persoon;

void StelPersoonIn(pPersoon pp) {
// hard-coded in dit voorbeeld
strcpy(pp->vnaam, "voornaam");
strcpy(pp->anaam, "achternaam");
pp->leeftijd = 1;
}

void DrukPersoonAf(pPersoon pp) {
printf("Voornaam: %s\nAchternaam: %s\nLeeftijd: %i\n\n", pp->vnaam, pp->anaam, pp->leeftijd);
}

int main() {
persoon p; // stack
pPersoon pp = (pPersoon)malloc(sizeof(persoon)); // heap
// al is pp = &p ook gewoon mogelijk, zoals NLScotty in zijn voorbeeld al aangaf. Alleen verwijzen pp en p dan naar hetzelfde object

StelPersoonIn(&p);
StelPersoonIn(pp);

DrukPersoonAf(&p);
DrukPersoonAf(pp);

free(pp);
return 0;
}[/cpp]
 
Hij gebruik ook C++ in zijn code, maar C ook. Denk dat hij een online tutorial volgt:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan