Fehler bei switch Anweisung
-
Hallo und guten Morgen liebe Gemeinde.
Ich wollte folgenden Code programmieren:
#include <iostream> #include <string> using namespace std; int main() { cout << "\tAlles rund um Strings\n"; cout << "\n"; int number_1; do { cout << "Was wollen Sie tun?\n"; cout << "(1) Stringlänge berechnen\n"; cout << "(2) Strings addieren\n"; cout << "(3) Pointer auf String\n"; cout << "(4) Referenz auf String\n"; cout << "(5) Groesse eines Strings ausgeben\n"; cout << "(0) Abbruch\n"; cin >> number_1; switch(number_1) { case 1: string Text_1; cout << "Geben Sie einen Text ein!\n"; getline(cin, Text_1); cout << "\n"; cout << "Diesen Text haben Sie eingegeben:\n"; cout << Text_1; cout << "Ihr Text hat " << Text_1.size() << " Buchstaben\n"; break; case 2: string str_1; string str_2; string str_3; std::cin.ignore(1); cout << "Geben Sie das erste Wort ein:"; getline(cin, str_1); cout << "Geben Sie das zweite Wort ein:"; getline(cin, str_2); str_3 = str_1 + str_2; cout << "Zusammengefuegt heisst das Wort " << str_3 <<"\n"; break; case 3: string Text_2; string *pText_2=&Text_2; std::cin.ignore(2); cout << "Geben Sie einen Text ein!\n"; getline (cin, Text_2); cout << "\n"; cout << "Diesen Text haben Sie eingegeben: \n"; cout << Text_2; cout << "Speicheradresse Ihres Textes: " << &Text_2 << "\n"; break; case 4: std::cin.ignore(3); string a("Hallo"); string & ref = a; ref += " Welt"; cout << (a==ref) << endl; cout << a << std::endl << ref << endl; break; case 5: std::cin.ignore(4); string Text; cout << "Geben Sie einen Text ein!\n"; cin >> Text; cout << sizeof(Text) << "\n"; cout << "Groesse:\t " << Text.size() << "\n"; cout << "Laenge:\t" << Text.length ()<< "\n"; cout << "Kapazitaet:\t" << Text.capacity() << "\n"; cout << "Max. Laenge:\t" << Text.max_size() << "\n"; break; case 0: cout << "Exit durch Abbruch!\n"; break; } }while(number_1!=0); return 0; }Nun bekomme ich jedoch bei der
switchAnweisung folgende Fehlermeldung:Error: Die Übertragung eines Steuerelements umgeht die Initialisierung von:Ich weiß nicht, auf was sich die Fehlermeldung bezieht, da ich denke, dass ich richtig programmiert habe...
Wo liegt mein Denkfehler??
Danke für die Antworten im Voraus.
Gruß
Max
-
Solch ein problem hatten wir vor ein paar Tagen schonmal.
Eine Variable hat einen gewissen Gültigkeitsbereich, also ein Bereich wo sie existiert. Dieser geht von der Definition bis zum nächsten zugehörigen schließenden }.
{ int i; // i wird hier erzeugt // ... // ... // ... // ... // ... } // i wird hier zerstörtAnalog auch:
{ // ... hier existiert i noch nicht! // ... // ... int i; // i wird hier erzeugt // ... // ... // ... // ... // ... } // i wird hier zerstörtAuf der anderen Seite muss eine Variable in solch einer Klammerumgebung stehen. In deinen Cases vom Switch stehen sie aber ohne alles da.
Die Lösung ist, dass du das hier machst:
switch (xXx) { case 1: { // ... } }Du setzt also in die cases noch mal solche Klammern.
-
Das ist exakt der letzte Fehler wie beim letzten mal.

-
War silent_max das auch ?
Hatte nur im Kopf, dass das Problem hier aufkam, aber wusste nicht mehr von wem
-
Skym0sh0 schrieb:
War silent_max das auch ?
Hatte nur im Kopf, dass das Problem hier aufkam, aber wusste nicht mehr von wem
Ja, das war ich und als cooky451 es gesagt hat, habe ich mich wieder daran errinnert...
Sorry nochmal...
-
ist ja alles np

-
silent_max schrieb:
Skym0sh0 schrieb:
War silent_max das auch ?
Hatte nur im Kopf, dass das Problem hier aufkam, aber wusste nicht mehr von wem
Ja, das war ich und als cooky451 es gesagt hat, habe ich mich wieder daran errinnert...
Sorry nochmal...
Wow, Du hast genau eine Woche gebraucht, das Erlernte zu vergessen.
Nicht schlecht.
mfg Martin
-
Es gibt Leute, die brauche weit weniger Zeit...
-
Skym0sh0 schrieb:
Es gibt Leute, die brauche weit weniger Zeit...
Vielleicht hat er auch erst jetzt wieder einen switch benutzt. Hätte er direkt im Anschluss an den letzten Thread dieses Programm geschrieben, wäre das Ergebnis vermutlich das gleiche gewesen.
-
mgaeckler schrieb:
Wow, Du hast genau eine Woche gebraucht, das Erlernte zu vergessen.
Sicher?
-
Hey Mädels, lasst doch mal die Nachfahren in Frieden ruhen...
-
Bashar schrieb:
mgaeckler schrieb:
Wow, Du hast genau eine Woche gebraucht, das Erlernte zu vergessen.
Sicher?
Mea Culpa. Es waren weniger als 5 Tage 13 Stunden und 50 Minuten.

-
Ich finde es nicht so bemerkenswert, dass das wieder vergessen wurde, sondern vielmehr, dass die Fehlermeldung nicht für ein 'Ach ja ... ' - Erlebnis gesorgt hat.
-
Belli schrieb:
Ich finde es nicht so bemerkenswert, dass das wieder vergessen wurde, sondern vielmehr, dass die Fehlermeldung nicht für ein 'Ach ja ... ' - Erlebnis gesorgt hat.
Daher hat Bashar das Wort "Erlernte" markiert. Er bezog sich nicht auf den Zeitraum.
-
Die Fehlermeldung kam mir schon bekannt vor, doch ich wusste nicht mehr in welchem Zusammenhang.
Das komische am Quellcode ist das, dass es zwar nun ausgeführt wird, aber dass Menüpunkt 1 übersprungen wird...
-
Das ist in der Tat komisch. Versuch mal das folgende (erklären macht eh keinen Sinn):
cin >> number_1; // hinter dieser Zeile in deinem Code das hier einfügen: cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
-
Ja,jetzt klappt es mit dem Menüpunkt 1.
Danke für den Tipp.
P.S.: Warum macht die Erklärung keinen Sinn?
-
silent_max schrieb:
P.S.: Warum macht die Erklärung keinen Sinn?
Es gab vor 6h so eine Diskussion darüber, aber offensichtlich hast du sie vergessen.
-
komisch schrieb:
Es gab vor 6h so eine Diskussion darüber, aber offensichtlich hast du sie vergessen.
Sorry, aber ich war zwischen ca. 10:30 Uhr und 17:30 Uhr nicht am PC. Das sind 7 Stunden, in denen ich nichts mitbekommen habe...
-
silent_max schrieb:
Sorry, aber ich war zwischen ca. 10:30 Uhr und 17:30 Uhr nicht am PC. Das sind 7 Stunden, in denen ich nichts mitbekommen habe...
Das erklärt so einiges...