Daten suche wie
-
Hab grad keine Entwicklungsumgebung zur Hand, deshalb entschuldige, wenn fehler auftreten, aber ich probiers einfach mal, ist größtenteils aus deiner Funktion rauskopiert.
void anzeige(int n) { cout<<resetiosflags(ios::left)<<setw(3)<<Liste[n]<<" "; cout<<setiosflags(ios::left); cout<<setw(20)<<Pers[Liste[n]]->ZeigName()<<", "; cout<<setw(24)<<Pers[Liste[n]]->ZeigVorname()<<" Geb. am: "; cout<<Pers[Liste[n]]->ZeigGebDatum()<<endl; cout<<" "<<setw(20)<<Pers[Liste[n]]->ZeigStr()+" "+Pers[Liste[n]]->ZeigNr(); cout<<" "; cout<<Pers[n]->ZeigPlz()<<" "; cout<<setw(20)<<Pers[Liste[n]]->ZeigOrt()<<" Tel.Nr: "; cout<<Pers[Liste[n]]->ZeigTelNr()<<endl<<endl; }Hmm, könnte evtl. klappen. Wie gesagt ist völlig ungetestet, und bloß kurz aus deiner anderen Funktion zusammen gesetzt. Aber wenn deine anderen Funktionen, die hier aufgerufen werden funktionieren, ist es durchaus möglich, das das funktioniert, am besten nach den Präprozessoranweisungen ein
void anzeige(int n);einfügen und dann die Funktion von oben irgendwo reinkopieren.
Den Vorgang nennt man im Übrigen Überladen, der Compiler stört sich nicht an der selben Bezeichnung, solange Art und/oder Anzahl der Parameter der beiden Funktionen mit dem gleichen Namen verschieden sind. Zu einer näheren Erklärung siehe Wikipedia.
MfG
-
Danke für die Antworten
Werde sie morgen gleich ausprobieren und berichten ob es geklappt hat.
-
Bartonno schrieb:
Und wie behebe ich das jetzt habe keine Ahnung bin so teilweise Anfänger.
Ich würde eher sagen der Code ist nicht von dir

Sonst könntest du solche Fehler ohne Probleme beheben, wenn du das alles selbst geschrieben HÄTTEST....Nicht bööse gemeint

-
Ja stimmt der Code ist größtenteils von meinem Lehrer nur kleinigkeiten wie die sortierfunktion sind von mir.
-
Habe das gemacht was oben mir mal erklärt wurde klappt bestimmt auch wenn nur diese Fehlermeldung nicht da wäre
[Linker Fehler] Unresolved external 'bearbeiten(int)' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\ADMIN\DESKTOP\ADRESSSTRUKTUR NEU\UNIT1.OBJ
Hähhh was soll das den nun bitte bedeuten wie ich aus dem Text entnehmen kann
stimmt irgend etwas mit bearbeiten(int) nicht nur was.
Ich hoffe ihr kennt eine Antwort in der Zwischenzeit versuche ich selber mein Glück
-
Schau dir mal die Schreibweise von bearbeiten in Deklaration und Definition an. Die sind bei dir unterschiedlich.
-
Hallo,
wenn der Code zum größten Teil von deinem Lehrer stammt kannst du ihm ja bei Gelegenheit mal verklickern das er einen der unübersichtlichsten Programmierstile hat, die ich seit langem gesehen hab, bevor man sowas verwenden kann muss man ja erstmal astyle drüberlaufenlassen, damit man wenigstens ein bisschen Struktur sieht und mal mehr als 2 Einrückungen hat. Ich hoffe auch, das diese ganzen globalen Zählvariablen nicht von dir stammen, sowas ist gelinde gesagt einfach unschön.MfG jasch
-
Juhu
es hat funktioniert danke das du mich auf die unterschiedlichen Schreibweisend aufmerksam gemacht hast. Leider hat es nicht lange Funktioniert.
Nachdem das Programm endlich mal wieder gestartet ist und ich einen Namen eingegeben habe und diesen nun suchen wollte hängte sich das Programm mit folgender Fehlermeldung auf.http://img191.imageshack.us/img191/6348/fehler6ph.th.jpg
Was jetzt woran könnte das liegen.
-
Bartonno schrieb:
Was jetzt woran könnte das liegen.
aufruf der funktion über einen 0-pointer?
-
Und das heißt in Anfängersprache jetzt was.

-
Also allgemein gesagt tritt so eine Speicherzugriffsverletzung auf, wenn das Programm versucht auf einen Speicher zuzugreifen, der ihm nicht gehört, meistens passiert sowas wenn ein Zeiger durch Zeigerarithmetik auf einen Speicherbereich ausserhalb eines Feldes zeigt.
MfG
-
Du könntest z.Bsp. mal in deinen Code schauen wo dein i belegt wird. Gibt es den Index auf den du zugreifen willst überhaupt?
Du würdest dir das Leben leichter machen, indem du auf deine Arrays verzichtest und statt dessen vector oder list nimmst.
-
Also ich glaube, der Fehler liegt in dieser for-Schleife:
for(n=1;n<i+1;n++); { if(name==Pers[Liste[n]]->ZeigName()) {wenn i dabei die Größe des Feldes ist (wie ich vermute) greifst du im letzten Schleifendurchlauf auf Liste[i] zu, die Indizes von arrays gehen aber grundsätzlich von 0 (!!!) - (arraygroesse -1) (!!!) das heißt du schießt über deine Arraygrenzen hinaus.
versuchs mal so
for(n=0;n<i;n++); { if(name==Pers[Liste[n]]->ZeigName()) { anzeige(n);MfG jasch
-
Okay
das verändernder for schleife hat soviel gebracht das die Fehlermeldung jetzt nicht mehr Auftaucht. Den wenn ich jetzt meine suche bestätigen will verschwindet das Fenster sofort bzw. es stürtzt ab.
Wie ist das möglich.
-
Schau nochmal hin. i wird nirgendwo belegt. Deswegen steht darin auch nicht die Größe deines Feldes.
-
Was meinst du mit belegt, i wird doch in jeder void verwendet.
-
Das der das Programm beendet liegt wohl daran, das du in der Funktion void anzeige(int i) am Ende nicht (wie bei void anzeige()) menu() aufrufst, somit springt das Programm raus und beendet sich und Braunstein hat recht, beim Drüberschauen ist mir auch keine Stelle aufgefallen wo i einen Startwert bekommt, ich glaube du solltest das mal nachholen, oder hab ich da was übersehen?
MfG jasch
-
Irgendwo muss mal sowas o.Ä. stehen.
i = 0;du deklarierst i bloß als int, aber du musst der Variable auch was zuweisen, bevor du lustig mit ihr rumrechnen kannst.
MfG jasch
-
jasch schrieb:
Irgendwo muss mal sowas o.Ä. stehen.
i = 0;du deklarierst i bloß als int, aber du musst der Variable auch was zuweisen, bevor du lustig mit ihr rumrechnen kannst.
MfG jasch
i ist eine statische nicht-lokale variable - und wird folglich beim programmstart zero-initialisiert (dass es nicht unbedingt guter stil ist - ist eine andere frage). das ganze programm ist schließlich in grässlicher verfassung :p
-
Habe menu() eingetragen und i eine Wert zugewiesen. Das Fenster schließt sich jetzt zwar nicht mehr aber anstatt endlich mal Suchergebnisse auszuspucken kehrt es bloß ins Menü zurück.
Und was heißt hier in grässlicher Verfassung