wulfgang Geschrieben 17. Februar 2009 Geschrieben 17. Februar 2009 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. Zitieren
Klotzkopp Geschrieben 17. Februar 2009 Geschrieben 17. Februar 2009 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? Zitieren
wulfgang Geschrieben 17. Februar 2009 Autor Geschrieben 17. Februar 2009 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; Zitieren
Klotzkopp Geschrieben 17. Februar 2009 Geschrieben 17. Februar 2009 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. Zitieren
wulfgang Geschrieben 17. Februar 2009 Autor Geschrieben 17. Februar 2009 Das war der Fehler. :upps Zitieren
AndiE Geschrieben 17. Februar 2009 Geschrieben 17. Februar 2009 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; } Zitieren
Klotzkopp Geschrieben 17. Februar 2009 Geschrieben 17. Februar 2009 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. Zitieren
wulfgang Geschrieben 18. Februar 2009 Autor Geschrieben 18. Februar 2009 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. Zitieren
AndiE Geschrieben 18. Februar 2009 Geschrieben 18. Februar 2009 Hallo Klotzkopp, danke für die fundierte Antwort. Nun bin ich wieder schlauer. LG André Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.