Variableninhalt kann nicht gelöscht werden
-
hi,
ich habe ein programm schreiben, das mitgliederdaten verwaltet. u. a. sollen diese auch gelöscht werden (ich arbeite mit einem array, keinem pointer, und das soll auch so bleiben)
da bleibt ja nur die möglichkeit, den inhalt der variable auf leer (" ") zu setzen (es handelt sich um string-werte)
ich habe den debugger eingesetzt und bekomme in der markierten zeile den fehlerUnbehandelte Ausnahme bei 0x00423720 in Abschlussaufgabe mit Strings.exe: 0xC0000005: Zugriffsverletzung-Schreibposition 0x20202020.
ist ja auch klar: ich habe statt " " ' ' verwendet (wie man es bei char-werten macht). wenn ich dies änder, kommt beim kompilieren der fehler
c:\Dokumente und Einstellungen\Internet\Desktop\C++-Schulung\Programme\Abschlussaufgabe optimiert\Abschlussaufgabe mit Strings.cpp(521) : error C2440: '=': 'const char [2]' kann nicht in 'std::allocator<_Ty>::value_type' konvertiert werden
with
[
_Ty=char
]
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformatund das ganze natürlich vier mal...
hier mal mein code:
void MitgliedLoesch() { char EingabeLoesch; int MitgliedNr; do // Schleife, läuft solange, Eingabe gleich true { system("cls"); cout << "\n\tMitglieder loeschen:"; cout << "\n\t~~~~~~~~~~~~~~~~~~~~"; for ( int Zaehler=0; Zaehler < gesNr; Zaehler++) // Zähler wird bei jedem Durchlauf um 1 erhöht { if (Mitglied[Zaehler].Name!=" ") // Ausgabe nur, wenn Name ungleich leer ist { cout << endl << Zaehler; cout << " --> "; cout << Mitglied[Zaehler].Name; // Ausgabe des Namens cout << ", "; cout << Mitglied[Zaehler].Vorname; // und des Vornamens cout << endl; } } cout << "\n\nBitte geben Sie die Nr. des zu loeschenden Mitglieds ein\n\n\t"; cin >> MitgliedNr; // Eingabe der Nr, dessen Mitglied gelöscht werden soll for (Zaehler=0; Zaehler<35; Zaehler++) { Mitglied[MitgliedNr].Name[Zaehler]=' '; <<--- Hier kommt der Fehler // alle strings werden auf leer gesetzt Mitglied[MitgliedNr].Vorname[Zaehler]=' '; Mitglied[MitgliedNr].StrasseNr[Zaehler]=' '; Mitglied[MitgliedNr].PLZ=0; // alle int-Werte auf 0 Mitglied[MitgliedNr].Ort[Zaehler]=' '; Mitglied[MitgliedNr].GebJahr=0; Mitglied[MitgliedNr].GebMonat=0; Mitglied[MitgliedNr].GebTag=0; Mitglied[MitgliedNr].MitgliedMon=0; Mitglied[MitgliedNr].MitgliedJahr=0; Mitglied[MitgliedNr].Tel=0; Mitglied[MitgliedNr].Beitrag=0; } cout << "Moechten Sie ein weiteres Mitglied loeschen? (j/n)"; // Frage, ob weiteres Mitlied gelöscht werden soll cin >> EingabeLoesch; } while (EingabeLoesch == 'j'); Menu(); }ich hoffe, ihr könnt mir helfen, woran das liegt, und wie ich diesen fehler behebe.
-
Du solltest für die Namen und Adressangaben lieber std::string nehmen als char[], dann klappt es auch mit dem Löschen (und dann ist auch deine seltsame for()-Schleife überflüssig).
-
ich habe ja strings genommen. deshalb wundert es mich ja, dass " " sich nicht kompilieren lässt.
-
ah... jetzt hab ich meinen fehler entdeckt. von meinen hin- und her-änderungen hab ich in der funktion vergessen, den index wegzunehmen, in der initialiesierung waren es schon string-werte.
-
sarah1986 schrieb:
ich habe ja strings genommen. deshalb wundert es mich ja, dass " " sich nicht kompilieren lässt.
Ja, aber Strings löscht man nicht mit "for(i=0;i<x;++i)str[i]=' ';" - das geht viel schneller mit str="";
PS: Und der leere String ist "" und nicht " " (letzteres ist ein alleinstehendes Leerzeichen).
-
ist das nicht egal, solang ich es einheitlich mache?
-
sarah1986 schrieb:
ist das nicht egal, solang ich es einheitlich mache?
Wenn du einen std::string leeren möchtest empfehle ich dir die methode clear(). Oder eben "" zuweisen.
Wenn du " " übergibst ist dein string nicht leer. empty() gibt false zurück und size() oder length() geben 1 zurück.
Daher ist das nicht sonderlich empfehlenswert ( " " zuübergeben ) wenn du einen Leeren String haben möchtest.
BR
evilissimo