Veröffentlicht 17. Februar 200916 j Guten Morgen, ich versuche verzweifelt einen string in einen integer umzuwandeln. Erhalte als Fehlermeldung aber immer error C2065: 'converter' : undeclared identifier istringstream converter((zeichnungsnummern_xar[2].substr(11,2)));converter >> hoechstes_blatt; Wieso? converter ist doch deklariert.
17. Februar 200916 j Wieso? converter ist doch deklariert. Das lässt sich aus diesem winzigen Codefragment nicht ablesen. Der Compiler ist aber anderer Meinung, und meistens hat er Recht. Ist das die erste Fehlermeldung? Hast du <sstream> eingebunden?
17. Februar 200916 j Ist das die erste Fehlermeldung? Hast du <sstream> eingebunden? Ist die erste Fehlermeldung und ich habe sstream eingebunden. while (bWorking) { bWorking = finder.FindNextFile (); anzahl_dateien++; string s_dateiname; s_dateiname = finder.GetFileTitle(); zeichnungsnummern_xar.push_back(s_dateiname); cout << finder.GetFileTitle(); cout << " "<< s_dateiname.length() << "\n"; } cout << anzahl_dateien;//Anzahl der Blätter ermitteln int hoechstes_blatt=0; while(hoechstes_blatt<anzahl_dateien) istringstream converter((zeichnungsnummern_xar[2].substr(11,2))); converter >> hoechstes_blatt;
17. Februar 200916 j Der Rumpf einer while-Schleife umfasst nur die nächste Anweisung. Da du keine geschweiften Klammern gesetzt hast, ist es also nur die Deklaration von converter. Die nächste Zeile converter >> hoechstes_blatt; gehört nicht mehr zur Schleife. Der Stringstream wird im Schleifenrumpf deklariert, ist also danach nicht mehr gültig. Wenn man seinen Code konsequent richtig einrückt, findet man solche Fehler sehr viel schneller.
17. Februar 200916 j Hallo, Mir erschliesst sich die Funktion dieses Codes nicht. Kann mir mal jemand helfen? LG André while(hoechstes_blatt<anzahl_dateien) { istringstream converter((zeichnungsnummern_xar[2].substr(11,2))); converter >> hoechstes_blatt; }
17. Februar 200916 j Die Schleife geht vermutlich noch weiter, diese beiden Zeilen allein ergeben keinen sinnvollen Schleifenrumpf, weil sich der Wahrheitswert der Abbruchbedingung möglicherweise niemals ändert. Zum Inhalt: Es wird ein istringstream-Objekt namens converter erstellt. istringstream ist eine Klasse, mit deren Hilfe man Strings in andere Typen konvertieren kann. Man "füttert" den istringstream mit einem String, und kann dann daraus, wie aus cin oder einem ifstream, mit dem operator>> auslesen. Hier wird converter mit dem String zeichnungsnummern_xar[2].substr(11,2) initialisiert. zeichnungsnummern_xar ist vermutlich ein Array oder Vector von Strings. Danach wird aus dem Stream die int-Variable hoechstes_blatt befüllt. Wenn also im Stream beispielsweise der String "42" steht, steht hinterher in der int-Variablen der Wert 42. Das Ganze hätte man auch mit sscanf oder atoi machen können, allerdings ist der Funktionsumfang dieser Funktionen von vornherein beschränkt. Zudem kann sscanf keine Typprüfung bieten. Stringstreams sind flexibler. Man kann aus ihnen (wie aus jedem anderen istream) jeden Typ herauslesen, der einen operator>> anbietet, und die kann man für eigene Typen selbst schreiben. Stringstreams bieten sich also insbesondere für die generische Programmierung (also Templates) an.
18. Februar 200916 j Die Schleife geht vermutlich noch weiter, diese beiden Zeilen allein ergeben keinen sinnvollen Schleifenrumpf, weil sich der Wahrheitswert der Abbruchbedingung möglicherweise niemals ändert. Richtig, die Anweisung hoechstes_blatt++ fehlte noch. zeichnungsnummern_xar ist vermutlich ein Array oder Vector von Strings. Hier ist zeichnungsnummern_xar ein Vector von strings. Die Schleife ist Teil einer Funktion, welche Dateien, die einen Index in ihrem Namen enthalten, nach dem Index ordnet.
18. Februar 200916 j Hallo Klotzkopp, danke für die fundierte Antwort. Nun bin ich wieder schlauer. LG André
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.