Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Umwandlung string to int

Empfohlene Antworten

Veröffentlicht

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.

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;

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.

Das war der Fehler. :upps

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;

}

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.