Verkettete Listen in Funktionen
-
ich rufe die Funktion mit
push(p,q,c);auf.
c ist weiter oben im Programm definiert und initialisiert
-
hallo ich habe noch ein weiteres Problem!
int pop(node *anker, node *a) { cout << "Waggon-Nr.: " << anker->nummer << " entnommen." << endl; a=anker; anker=anker->next; delete (a); return 1;diese Funktion löscht den Listenkopf und ernennt automatisch den nächsten Teil zum neuen Listenkopf, aber ich kann diese Funktion nur einmal in meinem Programm benutzen, sollte ich es nochmal benutzen stürzt das Programm ab! Woran könnte das liegen?
-
Hallo, beide Fragen wurden schon beantwortet.

manni66 schrieb:
Funktioniert nicht, aha.
Du suchst vermutlich call by reference.
void push(node *&p /*, node* q*/,int nr) { p=p->next = new node; p->data=nr; p->next = NULL; }Und was '&' mit manni66` Antwort zu tun hat und was du bei pop änderst, findest du sicherlich alleine raus...
MFG John.
-
eigentlich möchte mein Dozent das ja nicht in dieser Form haben aber weil ich eh schon einen Tag in Verzug bin versuch ich mir mal die Parameterüber über call by reference anzueignen. Muss er das halt so akzeptieren. Dankeschön
-
Vermutlich unterrichtet dein Dozent eher C und will das so haben:
void push(node **p /*, node* q*/,int nr) { *p=p->next = new node; (*p)->data=nr; (*p)->next = NULL; }
-
das & steht ja für den address-of-operator so weit ich weiß. Wie erfolgt denn hier der Aufruf der Funktion in der mainfunktion?
ich bekomme da folgende Fehlermeldung: Mehrere Funktionen von "Überladene Funktion"push"" stimmen mit der Argumentliste überein.
-
genau das doppelte Sternchen hat er einmal in seiner Vorlesung erwähnt wird jedoch nicht in seinem Script genauer bearbeitet. jetzt fällts mir wieder ein ^^
-
Diandranewby schrieb:
das & steht ja für den address-of-operator so weit ich weiß. Wie erfolgt denn hier der Aufruf der Funktion in der mainfunktion?
ich bekomme da folgende Fehlermeldung: Mehrere Funktionen von "Überladene Funktion"push"" stimmen mit der Argumentliste überein.Das ist eine sog. Referenz.
Das ist quasi wie ein doppelter Pointer, nur kannst du es ohne &val aufrufen und den Wert ohne *ptr lesen/schreiben.
-
jetzt hab ich ein Problem mit dem linker der Compiler gibt gleich zwei Fehlermeldungen an. LNK1120: Nicht aufgelöste externe Verweise und LNK 2019: Verweis auf nicht aufgelöstes externes Symbol.
-
Die Definition passt nicht zur Deklaration, zeig mal Code.
-
int pop(waggon **anker,waggon **p) { if(isEmpty(anker)) return 0; *p=*anker; *anker=(*anker)->next; delete (p); return 1; }int pop(waggon **);ein kleiner Auszug
-
Ja, die Deklaration hat einen Parameter, die Definition zwei.
-
int erzeugestack(waggon **anker,waggon**p,uint nr) { *anker = new waggon; *p=*anker; (*p)->nummer = nr; (*p)->next = NULL; return 0; }da wird auch ein fehler angezeigt
-
ok das hätte mir auch auffallen können ^^
int erzeugestack(waggon **,waggon**,uint);
-
ich kann das Programm jetzt jedenfalls starten aber es bricht sehr schnell wieder ab und zwar wenn die Funktion die in dem post über diesem hier gepostet wurde aufgerufen wird.
"Unbehandelte Ausnahme 0x00a1087 in Kriteriumsaufgabe.exe
.Zugriffsverletzung beim Schreiben an Position 0x0000000"